I have a C# TCP server and a C++ TCP client (using winsock2). I'm trying to send multiple messages but only the first one is being received...
C# server code
IPAddress raw = IPAddress.Parse("127.0.0.1");
IPEndPoint ip = new IPEndPoint(raw, 7777);
Socket client = new Socket(ip.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
client.Bind(ip);
client.Listen(69);
Console.WriteLine("Waiting for connection.");
Socket conn = client.Accept();
Console.WriteLine("Got connection");
string message;
int bytesRecv;
byte[] recvBuf = new byte[100];
bytesRecv = conn.Receive(recvBuf);
Console.WriteLine("Received message, bytes: " + bytesRecv);
message = System.Text.Encoding.UTF8.GetString(recvBuf);
Console.WriteLine(message);
Array.Clear(recvBuf, 0, recvBuf.Length);
bytesRecv = conn.Receive(recvBuf);
Console.WriteLine("Received message, bytes: " + bytesRecv);
message = System.Text.Encoding.UTF8.GetString(recvBuf);
Console.WriteLine(message);
Array.Clear(recvBuf, 0, recvBuf.Length);
bytesRecv = conn.Receive(recvBuf);
Console.WriteLine("Received message, bytes: " + bytesRecv);
message = System.Text.Encoding.UTF8.GetString(recvBuf);
Console.WriteLine(message);
Array.Clear(recvBuf, 0, recvBuf.Length);
bytesRecv = conn.Receive(recvBuf);
Console.WriteLine("Received message, bytes: " + bytesRecv);
message = System.Text.Encoding.UTF8.GetString(recvBuf);
Console.WriteLine(message);
Array.Clear(recvBuf, 0, recvBuf.Length);
Console.ReadLine();
And here's the C++ code
#pragma once
#include "pch.h"
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <iostream>
#include <string>
#include<winsock2.h>
#include <WS2tcpip.h>
#pragma (lib, "ws2_32.lib")
using namespace std;
int main()
{
WSAData wsaData;
SOCKADDR_IN addr;
int result = WSAStartup(MAKEWORD(2, 2), &wsaData);
cout << "startup gave: " << result << endl;
SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
addr.sin_family = AF_INET;
addr.sin_port = htons(7777);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
result = connect(s, (SOCKADDR*)&addr, sizeof(addr));
cout << "Connect gave: " << result << endl;
int count = 0;
char sendBuf[1024] = "Hello";
int sendResult;
sendResult = send(s, sendBuf, sizeof(sendBuf), 0);
sendResult = send(s, sendBuf, sizeof(sendBuf), 0);
sendResult = send(s, sendBuf, sizeof(sendBuf), 0);
sendResult = send(s, sendBuf, sizeof(sendBuf), 0);
}
Why is only the first message received? The sever is receiving all of the bytes in one recv statement so there is no reason (that I know of) that this shouldn't work. Thanks!
100 Bytes (full amount sent) are received on each of the server's receive statements.