首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

请问Socket,数据发送接收有关问题

2013-11-26 
请教Socket,数据发送接收问题!小弟最近在研究SOCKET,现在出现发现一个问题。就是我需要在发送消息后等待消

请教Socket,数据发送接收问题!
小弟最近在研究SOCKET,现在出现发现一个问题。
就是我需要在发送消息后等待消息接收,
比如说:我一个方法里面,要发送数据到一个客户端,同时需要接收到客户端的数据之后,才完成该方法,请问大树具体怎么实现,或者一些思路!谢谢! socket?tcp
[解决办法]
用同步接收和发送
[解决办法]
在服务端,建立循环,触发式等待socket。
如果客户端连接,并发送数据到服务端,则单独开启线程,
处理客户端请求,并利用客户端的连接传送数据到客户端。
一段简单的代码:

 sockets = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPAddress hostIP = IPAddress.Parse(Dns.GetHostEntry(Dns.GetHostName()).AddressList[0].ToString());
            IPEndPoint ep = new IPEndPoint(0, 7788);

            sockets.Bind(ep); 
            sockets.Listen(10);
            textBox1.BeginInvoke(new MethodInvoker(delegate
            {
                textBox1.Text += "侦听启动\r\n";
            }));

            while (thread.ThreadState != ThreadState.Aborted)
            {
                Socket sReceive = sockets.Accept();
                textBox1.BeginInvoke(new MethodInvoker(delegate
                {
                    textBox1.Text += ((IPEndPoint)sReceive.RemoteEndPoint).Address.ToString() + " 连接\r\n";
                }));
                int bufLen = sReceive.ReceiveBufferSize;
                if (bufLen == 0) continue;
                byte[] bData = new byte[bufLen];
                int DataLen = sReceive.Receive(bData);
                if (DataLen == 0) continue;
                string StrData = Encoding.Default.GetString(bData, 0, DataLen);
                textBox1.BeginInvoke(new MethodInvoker(delegate
                {
                    textBox1.Text += ((IPEndPoint)sReceive.RemoteEndPoint).Address.ToString() + ":" +StrData + "\r\n";
                }));
            }
            sockets.Close();
            sockets = null;


Socket sReceive = sockets.Accept();

这个表示有客户端连接,到这一步,应该建立一个新线程类,把sReceive传到线程中,做数据接收,以及给客户端数据的回传。


上述代码的完整工程地址:
http://download.csdn.net/detail/mjp1234airen4385/2897578
[解决办法]
这个例子里,没有使用线程,也没有给客户端回传数据。
[解决办法]
Begin-End方法对,在发送方的EndReceive方法的AsyncCallback回调中解析回复,不用纠结线程

热点排行