新手求助,要做一个基于C/S的聊天程序,希望高手们给点意见
小弟准备做一个基于C/S的聊天程序,基本需求参照QQ。当然我不是上来要代码的哈,只是有一些问题想大虾们给点意见。
1.基于TCP聊天;
以前做过用的是udp协议进行聊天,优点当然省事,client发送消息,server直接根据接收方的ip地址和端口直接转发给目标。但被老外各种吐槽,各种包丢失啊等。。。好吧,这次用tcp(有高手采用udp但在应用层+了与tcp类似的控制机制,我没那能力哈)可是这就意味着client也必须建立TcpListener,我自己写了个草稿程序,client端TcpClient与服务器建立会话的时候,必须指定本地使用端口,而client端的TcpListener同样开启监听同一个端口,这样server端返回socket后利用IPEndPoint就能够得到正确的端口号(当server成为tcp会话发起方的时候必须知道端口号);
//Client 端 private void sendMsg() { try { tClient = new TcpClient(new IPEndPoint(IPAddress.Parse("10.111.3.35"), 8001));//指定端口 tClient.Connect("10.111.3.35", 8080); ns = tClient.GetStream();
private void receiveMsg() { try { msgListener = new TcpListener(8001);//侦听同一个端口 msgListener.Start();
byte[] data = new byte[256]; int size = ns.Read(data,0,256); string content = Encoding.Unicode.GetString(data, 0, size); EndPoint EP = socketConn.RemoteEndPoint; IPEndPoint iep = (IPEndPoint)EP; if (content.Equals("exit")) return false; if (content.Equals("log")) { Client.addClient(iep);//服务器记录用户ip和端口,以便发起tcp会话使用 }