socket编程(tcp)实现简单的聊天室

聊天室:服务器端

//clientList用于存放连接的客户端

static List clientList = new 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();

        

你可能感兴趣的:(unity相关)