Я новичок / начинающий программист, испытывающий проблемы с работой некоторого простого клиентского / серверного кода C.Моя конечная цель - отправить «поток» данных азимута / высоты с сервера клиенту, а затем преобразовать эти данные по мере их получения (это будет просто деление, но я не знаю, как это сделатьлибо) в данные о положении устройства панорамирования / наклона, а затем вывести преобразованные данные через последовательный порт на головку панорамирования / наклона.(Я, вероятно, вернусь, чтобы спросить об этом позже ...)
Сейчас я просто пытаюсь выяснить, как получать и отправлять данные.Я взял код с этого сайта.http://www.tenouk.com/Winsock/Winsock2example3.html. Мне пришлось переместить несколько объявлений, чтобы получить код для компиляции.
Я использую Windows 7 и VS2010 professional на клиентском ПК.Между клиентом и сервером нет маршрутизатора (они напрямую подключены через Ethernet).
Используя отладчик, я обнаружил, что застрял на этом этапе.
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr("12.266.66.255");
clientService.sin_port = htons(55555);
if (connect(m_socket, (SOCKADDR*)&clientService, sizeof(clientService)) == SOCKET_ERROR)
{
printf("Client: connect() - Failed to connect.\n");
WSACleanup();
return 0;
}
else
{
printf("Client: connect() is OK.\n");
printf("Client: Can start sending and receiving data...\n");
}
Я всегда получаю сообщение «Не удалось подключиться», и я не знаю почему.Я использую правильный IP-адрес хост-компьютера (я изменил его перед установкой здесь).
Если это плохой пример, я готов начать с другого примера.Я попробовал несколько примеров «эха», обычно встречающихся в Интернете, и у меня возникают похожие проблемы.Я могу дать больше информации о моих общих целях программы, если это поможет.Остальная часть кода клиента приведена ниже.Я использую код сервера (с перемещением объявлений) по той же ссылке.Спасибо.
int main()
{
int m_socket;
struct sockaddr_in clientService;
int bytesSent;
int bytesRecv = SOCKET_ERROR;
// Be careful with the array bound, provide some checking mechanism...
char sendbuf[200] = "This is a test string from client";
char recvbuf[200] = "";
// Initialize Winsock.
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != NO_ERROR)
printf("Client: Error at WSAStartup().\n");
else
printf("Client: WSAStartup() is OK.\n");
// Create a socket
m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (m_socket == INVALID_SOCKET)
{
printf("Client: socket() - Error at socket(): %ld\n", WSAGetLastError());
WSACleanup();
return 0;
}
else
printf("Client: socket() is OK.\n");
// Connect to a server.
// Just test using the localhost, you can try other IP address
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr("12.233.21.254");
clientService.sin_port = htons(55555);
if (connect(m_socket, (SOCKADDR*)&clientService, sizeof(clientService)) == SOCKET_ERROR)
{
printf("Client: connect() - Failed to connect.\n");
WSACleanup();
return 0;
}
else
{
printf("Client: connect() is OK.\n");
printf("Client: Can start sending and receiving data...\n");
}
// Send and receive data.
// Receives some test string to server...
while(bytesRecv == SOCKET_ERROR)
{
bytesRecv = recv(m_socket, recvbuf, 200, 0);
if (bytesRecv == 0 || bytesRecv == WSAECONNRESET)
{
printf("Client: Connection Closed.\n");
break;
}
if (bytesRecv < 0)
return 0;
else
{
printf("Client: recv() is OK.\n");
printf("Client: Received data is: \"%s\"\n", recvbuf);
printf("Client: Bytes received is: %ld.\n", bytesRecv);
}
}
// Sends some test data to server...
bytesSent = send(m_socket, sendbuf, strlen(sendbuf), 0);
if(bytesSent == SOCKET_ERROR)
printf("Client: send() error %ld.\n", WSAGetLastError());
else
{
printf("Client: send() is OK - Bytes sent: %ld\n", bytesSent);
printf("Client: The test string sent: \"%s\"\n", sendbuf);
}
WSACleanup();
return 0;
}