我在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