聊天室:服务器端
//clientList用于存放连接的客户端
static List
static void Main(string[] args){
Socket tcpSever = new Socket(AddressFamily.InterNetwork,SocketType.stream,ProtocolType.Tcp);
tcpSever.Bind(new IPEndPoint(IPAdress.Parse("192.168.0.112"),7788));
tcpSever.Listen(100);
while(true){
Socket clientSocket = tcpSever.Accept();
Client client = new Client(clientSocket);
clientList.Add(client);
}
}
//广播方法,对在连接的客户端发送消息,断开连接的将其从clientList里删除
public static void BroadcaseMessage(string message){
Var notConnectedList = new List
foreach(var client in clientList){
if(client.Connected)
client.SendMessage(message);
else
notConnectedList.Add(client);
}
foreach(var temp in notConnectedList){
clientList.remove(temp);
}
}
服务器的Client类,用于服务器处理与客户端的联系
private Socket clientSocket;
private Thread t;
private byte[] data = new byte[1024];
public client(Socket s){
clientSocket = s;
t=new Thread(ReceiveMessage);
t.Start();
}
private void ReceiveMessage(){
while(true){
if(clientSocket.Poll(10,SelectMode.SelectRead)){ //判断是否断开连接,10ms,第二个参数代表是否能够读取
clientSocket.Close(); break;
}
int length = clientSocket.Receive(data);
string message = Encoding.UTF8.GetString(data,0,length);
服务器所在的类.BroadcastMessage(message);
}
}
public void SendMessage(string message){
byte[] data1 = Endcoding.UTF8.GetBytes(message);
clientSocket.Send(data1);
}
public bool Connected(){
get{return clientSocket.Connected;
}
聊天室 客户端
public class ChatManager:MonoBehaviour{
public string ipAddress = "192.168.0.112";
public int port = 7788;
private byte[] = new byte[1024];
private string message="";
private Socket clientSocket;
private Threat T;
void ConnectToServer(){
clientSocket = new Socket(AddressFamily.InterNetwork,SokcketType.Stream,ProtocolType.Tcp);
clientSocket.Connect(new IPEndPoint(IPAddress.Parse(ipaddress).port));
//创建一个新线程用来接受消息
t = new Thread(ReceiveMessage);
t.Start();
}
void ReceiveMessage(){
while(true){
if(clientSocket.Conneceted == false) break;
int length = clientSocket.Receice(data);
message = Encoding.UTF8.GetString(data,0,length);
}
}
void SendMessage(string message){
byte[] data = Encoding.UTF8.GetBytes(message);
clientSocket.Send(data);
}
//结束的时候需要关闭连接 clientSocket.Close();