我在VS.NET中有两个单独的套接字项目。其中之一是发件人,另一个是收件人。启动接收器后,我从发件人发送数据。尽管发送方法在成功传输时返回13个字节,但接收器接收到0(零)。接收方接受发送方套接字并收听。但无法接收数据。为什么?有关套接字通信的问题
P.S. :如果发送者代码放在接收者项目中,接收者也可以获取数据。
我在VS.NET中有两个单独的套接字项目。其中之一是发件人,另一个是收件人。启动接收器后,我从发件人发送数据。尽管发送方法在成功传输时返回13个字节,但接收器接收到0(零)。接收方接受发送方套接字并收听。但无法接收数据。为什么?有关套接字通信的问题
P.S. :如果发送者代码放在接收者项目中,接收者也可以获取数据。
我认为这个问题是发送应用程序在结束之前接收器可以读取数据。如果在Send
调用后加上Thread.Sleep(1000);
,接收应用程序将读取数据(至少在我测试时)。
这很可能是您的代码中的一个错误,但没有看到代码就无法辨别。
但是请注意,TCP/IP没有消息的概念,只有数据流。所以发送13个字节并在一次读取中接收6个字节并在下一个字节中接收7个字节是可能的。或者反过来发送13个字节,然后再发送7个字节,并在接收端将它们接收为20个字节的单个块。
非常感谢您的关注。 这里是代码:
/***********************************接收者*** *******************/
类节目 { 静态无效的主要(字符串[]参数) { 接收机的recv =新的接收器(); recv.Start();
}}
public class Receiver
{
public void Start()
{
Socket gateSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
gateSocket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8999));
gateSocket.Listen(12);
Thread thGateListen = new Thread(new ParameterizedThreadStart(GateListener));
thGateListen.Start(gateSocket);
}
public void GateListener(object obj)
{
Socket gateSocket = (Socket)obj;
for (; ;)
{
Socket newRequest = gateSocket.Accept();
Console.WriteLine("New Connection Request");
Thread thReadData = new Thread(new ParameterizedThreadStart(ReadFromSocket));
thReadData.Start(newRequest);
}
}
public void ReadFromSocket(object obj)
{
Socket s = (Socket)obj;
for (; ;)
{
if (s.Available > 0)
{
byte[] buffer = new byte[s.Available];
s.Receive(buffer);
Console.WriteLine(System.Text.Encoding.ASCII.GetString(buffer));
}
}
}
}
/*********发件人* *********************/
类节目 { 静态无效的主要(字符串[]参数) { 发送器S =新发件人() ; s.Send(“Hello Socket!”); }}
class Sender
{
public void Send(string s)
{
Socket sendSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sendSocket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8999));
sendSocket.Send(System.Text.Encoding.ASCII.GetBytes(s));
}
}
需要查看更多代码,您如何建立连接并发送数据? – NibblyPig 2010-03-22 11:47:35