客户端代码:
private void 登陆_Load(object sender, EventArgs e)
        {
            contactWithServer = new ContactWithServer(this);
            clientcontactserverThread = new Thread(new ThreadStart(contactWithServer.ReceiveMsg));
            clientcontactserverThread.Start();           
        }
public ContactWithServer(登陆 loginForm)
        {
            this.loginForm = loginForm;
            //this.user = user;
            localIpep = new IPEndPoint(IPAddress.Any, 8888);
            remoteIpep = new IPEndPoint(IPAddress.Parse(serverIP), 6666);//客户端把登陆请求发给服务器6666端口
            udpReceiveClient = new UdpClient(localIpep);
            udpSendClient = new UdpClient();            udpSendState = new UdpState();
            udpSendState.ipEndPoint = remoteIpep;
            udpSendState.udpClient = udpSendClient;            udpReceiveState = new UdpState();
            udpReceiveState.ipEndPoint = localIpep;
            udpReceiveState.udpClient = udpReceiveClient;
        }
要是客户端和服务器不指定端口的话,服务器能收到数据,但是客户端收不到。若是都指定的话,只能运行一个客户端,这个该怎么解决。。

解决方案 »

  1.   

    首先你要搞清楚你使用的那个协议!如果是TCP/IP 协议的话必须指定端口因为是点对点的通讯,如果是UDP 就不需要指定客户端端口使用广播即可。看你的代码好像是前者!
      

  2.   

    你的锁  lock 用的有问题你应该是锁住 一个请求的对象 但是你这里lock(this)不知道想干什么。
    你可以使用队列 把接收的请求放在队列里面然后逐个处理!
      

  3.   

    首先你要搞清楚你使用的那个协议!如果是TCP/IP 协议的话必须指定端口因为是点对点的通讯,如果是UDP 就不需要指定客户端端口使用广播即可。看你的代码好像是前者!首先你要搞清楚你使用的那个协议!如果是TCP/IP 协议的话必须指定端口因为是点对点的通讯,如果是UDP 就不需要指定客户端端口使用广播即可。看你的代码好像是前者!        我想用的是UDP协议,这些代码都是从网上找来的,通过指定端口能实现服务器和客户端的通信,一旦服务器这边不指定端口,就不能把消息发给客户端了
      

  4.   

    参考:http://www.cnblogs.com/zhili/archive/2012/08/25/TCP.html
      

  5.   

    UDP 协议服务器的端口肯定要固定啊 要不然就惨了  客户端端口不固定 哪服务器就变成一般的客户端了 那就不存在服务器这一说了!UDP虽然是无链接的 但是服务器地址是固定的啊.
      

  6.   

    LZ你可以到CSDN 中下一个源码看看!