[英]c# sockets help
我是完全不熟悉C#套接字編程的人,我試圖讓兩個正在運行的.exe相互交流:
static void Main(string[] args) {
bool sender = !false;
if (args.Length > 0) sender = !true;
if (sender) {
try {
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
IPEndPoint ipe = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8221);
sock.Connect(ipe);
while (true) {
string toSend = Console.ReadLine();
sock.Send(Encoding.UTF32.GetBytes(toSend));
}
}
catch (SocketException e) {
Console.WriteLine(e.Message);
Console.ReadLine();
}
}
else {
try {
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
IPEndPoint ipe = new IPEndPoint(IPAddress.Any, 8221);
sock.Bind(ipe);
sock.Listen(4);
while (true) {
if (!sock.Connected) continue;
byte[] buffer = new byte[1024];
if (sock.Receive(buffer) > 0) Console.WriteLine(Encoding.UTF32.GetString(buffer));
}
}
catch (SocketException e) {
Console.WriteLine(e.Message);
Console.ReadLine();
}
}
}
目前,這兩個程序都沒有錯誤運行,但是它們似乎沒有連接(如果(!sock.Connected)始終為true)。
請幫忙,謝謝。
編輯 :注意到您在偵聽器中沒有sock.Accept()。 您需要獲得一個可以“交談”的傳入套接字。 將一個Socket c = sock.Accept()
放在while(true)
循環之前,並使用c
套接字發送和接收數據
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
IPEndPoint ipe = new IPEndPoint(IPAddress.Any, 8221);
sock.Bind(ipe);
sock.Listen(4);
Socket c = sock.Accept(); // added
while (true) {
if (!c.Connected) continue;
byte[] buffer = new byte[1024];
if (c.Receive(buffer) > 0) Console.WriteLine(Encoding.UTF32.GetString(buffer));
}
和; 作為建議,每當我制作套接字程序時,通常都會在實際緩沖區之前發送要發送的字節數。 如果您能夠使發送方和偵聽方建立連接,則可能是使它們交換數據的解決方案。
public void send(byte[] buf) {
socket.Send(BitConverter.GetBytes(buf.Length), SocketFlags.None);
socket.Send(buf, buf.Length, SocketFlags.None);
}
public byte[] receive() {
byte[] lengthBytes = new byte[4];
int read = socket.Receive(lengthBytes);
// read contains the number of read bytes, so we can check it if we want
int length = BitConverter.GetInt32(lengthBytes);
byte[] buf = new byte[length];
socket.Receive(buf);
return buf;
}
在服務器代碼中的任何地方,您都不接受傳入的連接。 您將必須在服務器端為新的傳入客戶端接受並創建套接字 。
Socket newSock = sock.Accept();
if (!newSock.Connected) continue;
else
{...}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.