我写了一个简单的收发讯息程序
服务器和客户端都是本机(不知道这样可不可以...)
画面Load进来的时候发送一个请求
然后点击一个按钮来收到刚才发送的请求
但是点击按钮后就一直等待,好像没有受到请求,一直在等待的样子
画面Load时候发送的程序
Socket sendsocket = new Socket(AddressFamily.InterNetwork,
                                            SocketType.Stream,
                                            ProtocolType.Tcp);
//设置发送数据的地址
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("192.168.0.1"), 80);
sendsocket.Connect(endPoint);//发送数据
byte[] fsSize = Encoding.UTF8.GetBytes("CALL FROM ZXR");
sendsocket.Send(fsSize);//关闭发送数据的Socket
sendsocket.Shutdown(SocketShutdown.Send);
sendsocket.Close();点击按钮时接收的程序
Socket receiveSocket = new Socket(AddressFamily.InterNetwork,
                                                SocketType.Stream,
                                                ProtocolType.Tcp);
//设置接受数据的地址
IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("192.168.0.1"), 80);receiveSocket.Bind(endpoint);
receiveSocket.Listen(2);
Byte[] recData = new Byte[300000000];
Socket tmpSocket = receiveSocket.Accept();//此句执行过就没有反应了,一直等待...
tmpSocket.Receive(recData);
byte[] buffer1 = new byte[tmpSocket.ReceiveBufferSize];
if (tmpSocket.Receive(buffer1) > 0)
{
    Console.WriteLine(tmpSocket.Receive(recData).ToString());
}

解决方案 »

  1.   

    socket我也没弄得很明白,大概看了一下,你参考一下。
    1、接收端先listen发送端才能connect
    2、发送端发完就socket.close,那连接就断了,接收端应该是接不到数据的。我觉得你应该在load里开始listen,在button1.click里发送
      

  2.   

    当Accept时,socket开始监听,当有连接请求时返回一个可用的socket。在你的这个程序里,你应当先点接受按钮,再去用客户端发送数据。
      

  3.   

    http://hi.baidu.com/kmiaoer/blog/item/74e7fddc9baa29a5cc1166ed.html/cmtid/53d47eecfb6edddc2e2e2116
      

  4.   

    问题补充阿
    我的收发地址都是用的本机的(IPAddress.Parse("192.168.0.1"), 80)
    这样的话每次bind的时候都会报10048的错误
    是不是收发的时候不能用同一个端口啊
    不能的话我只有一台机器想做收发试验该怎么办啊?
    另外1楼2楼说的大概是一个意思,就是要先监听再发送
    照你们的改了,为什么还是Accept走完就一直等待呢
    不知道是不是写错了,还能帮我把代码稍微修改一下呢?哈哈
    另外,和线程有没有关系阿
      

  5.   

    问题补充回答:
    你每次绑定的时候报10048,是因为端口被占用了,80是常用端口,http服务都会抢占这个端口,先查一下你本机上的服务吧。另外,在使用完端口后应当close发送端的端口你并没有绑定,你指定的是要连接到的服务器端端口。客户端端口是随机选择的,所以服务器和客户机可以在一个机器上。Accept走完就是等待,因为Accept是阻塞的。如果你报10048,那监听就没有建立,所以程序也不可能走下去。最后建议你看一看msdn的例子,你这程序连最基本的循环都没建立呢。
      

  6.   

    你们搞明白 socket编程的原理和流程