我在VS.NET中有两个独立的套接字项目。其中一个是发件人,另一个是接收者。启动接收器后,我从发送者发送数据。尽管send方法在成功传输时返回13个字节,但接收器接收0(零)。接收方接受发送方套接字并监听它。但无法接收数据。为什么呢?
P.S。 :如果发送者代码放在接收器项目中,接收者也可以获取数据。
答案 0 :(得分:1)
我认为问题在于发送应用程序在接收器可以读取数据之前结束。如果在Thread.Sleep(1000);
调用之后放置Send
,接收应用程序将读取数据(至少在我测试时)。
答案 1 :(得分:0)
很可能这是你的代码中的一个错误,但是没有看到代码就无法分辨。
但请注意,TCP / IP没有消息概念,只有数据流。所以它可以发送13个字节并在一次读取中接收6个,在下一个接收中接收7个字节。或者相反,发送13个字节然后再发送7个字节,并在接收端接收它们作为一个20字节的单个块。
答案 2 :(得分:0)
非常感谢你的兴趣。 这是代码:
/ ***********************************接收人********** ************ /
课程计划
{
static void Main(string [] args)
{
Receiver recv = new Receiver();
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));
}
}
}
}
/ *************************************发件人********** ************ /
课程计划 { static void Main(string [] args) { 发件人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));
}
}