[英]server dont receive data from client
我的服務器沒有從客戶端接收任何數據,但是沒有錯誤,所以我真的不知道出了什么問題。 在客戶端的while循環中,我嘗試發送一條消息。 服務器停留在recvfrom函數中,並且似乎未獲取數據。 cmd中的netstat顯示服務器偵聽端口50000。我給IPv6地址:: 1以及客戶端的控制台參數。
這是服務器的代碼:
#include <WinSock2.h>
#include <ws2ipdef.h>
#include <stdio.h>
#define PORT 50000
#define BUFFERSIZE 64
void error(char *err)
{
fprintf(stderr,"%s: %d\n", err, WSAGetLastError());
getchar();
exit(EXIT_FAILURE);
}
int main(int argc, char *argv[])
{
struct sockaddr_in6 server, client;
SOCKET sock;
char buffer[BUFFERSIZE];
LPTSTR recvBuff[1024];
DWORD recvBuffLen = 1024UL;
int len = sizeof(client);
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(1,1);
WSAStartup(wVersionRequested, &wsaData);
sock = socket(AF_INET6, SOCK_DGRAM, 0);
if (sock < 0)
error("Fehler beim Anlegen des Sockets");
memset( &server, 0, sizeof (server));
memset( &client, 0, sizeof (client));
server.sin6_family = AF_INET6;
server.sin6_port = htons(PORT);
server.sin6_addr = in6addr_any;
if (bind(sock, (struct sockaddr *) &server, sizeof(server)) == -1)
error("Fehler beim binden des Sockets");
while (1)
{
if (recvfrom(sock, buffer, BUFFERSIZE, 0, (struct sockaddr *)&client, &len) == -1)
error("Fehler beim erhalten von Daten");
printf("...");
printf("Pakete erhalten von: %s:%d\nDaten: %s\n\n", WSAAddressToString((struct sockaddr *)&client.sin6_addr, len, NULL, *recvBuff, &recvBuffLen), PORT, buffer);
}
closesocket(sock);
return 0;
}
這是我的客戶的代碼:
#include <WinSock2.h>
#include <ws2ipdef.h>
#include <stdio.h>
#define PORT 50000
#define BUFFERSIZE 64
void error(char *err)
{
fprintf(stderr,"%s: %d\n", err, WSAGetLastError());
getchar();
exit(EXIT_FAILURE);
}
int main(int argc, char *argv[])
{
struct sockaddr_in6 server;
SOCKET sock;
char buffer[BUFFERSIZE];
int len = sizeof(server);
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(1,1);
WSAStartup(wVersionRequested, &wsaData);
if (argc != 2) {
printf("Usage: %s <Server-IP>\n", argv[0]);
getchar();
exit(0);
}
sock = socket(AF_INET6, SOCK_DGRAM, 0);
if (sock == -1)
error("Socket Fehler");
memset( &server, 0, sizeof (server));
server.sin6_family = AF_INET6;
server.sin6_port = htons(PORT);
if ((WSAStringToAddressA(argv[1], AF_INET6, NULL, (SOCKADDR *)&server, &len)) < 0)
error("String konnte nicht aufgelößt werden");
while (1)
{
printf("\nDaten eingeben: (Enter für Text bestätigen, 'q' eingeben um zu beenden)");
scanf("%[^\n]", buffer);
getchar();
if (strcmp(buffer, "q") == 0)
exit(0);
if (sendto(sock, buffer, BUFFERSIZE, 0, (struct sockaddr *)&server, len) == -1)
error("Fehler bei Übertragung");
}
closesocket(sock);
return 0;
}
我希望有人能幫幫忙。
只是一個猜測:問題可能是stdout
緩沖-嘗試通過禁用它
setbuf(stdout, NULL);
或者只是在printf()
之后刷新stdout
:
printf("...");
printf("Pakete erhalten von: %s:%d\nDaten: %s\n\n", WSAAddressToString((struct sockaddr *)&client.sin6_addr, len, NULL, *recvBuff, &recvBuffLen), PORT, buffer);
fflush(stdout);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.