Редактировать : заметил, что у вас нет 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;
}