【发布时间】:2014-02-19 11:08:36
【问题描述】:
int CreateSocket()
{
struct sockaddr_in server, client; // creating a socket address structure: structure contains ip address and port number
WORD wVersionRequested;
WSADATA wsaData;
int len;
int iResult;
//int count = 0;
//u_long iMode = 1;
printf("Initializing Winsock\n");
wVersionRequested = MAKEWORD (1, 1);
iResult = WSAStartup (wVersionRequested, &wsaData);
if (iResult != NO_ERROR)
printf("Error at WSAStartup()\n");
// create socket
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock < 0) {
printf("Could not Create Socket\n");
//return 0;
}
printf("Socket Created\n");
// iResult = ioctlsocket(sock, FIONBIO, &iMode);
//if (iResult != NO_ERROR)
// printf("ioctlsocket failed with error: %ld\n", iResult);
// create socket address of the server
memset( &server, 0, sizeof(server));
// IPv4 - connection
server.sin_family = AF_INET;
// accept connections from any ip adress
server.sin_addr.s_addr = htonl(INADDR_ANY);
// set port
server.sin_port = htons(52428);
//Binding between the socket and ip address
if(bind (sock, (struct sockaddr *)&server, sizeof(server)) < 0)
{
printf("Bind failed with error code: %d", WSAGetLastError());
}
//Listen to incoming connections
if(listen(sock, 10) == -1){
printf("Listen failed with error code: %d", WSAGetLastError());
}
printf("Server has been successfully set up - Waiting for incoming connections");
for(;;) // accepting the connection continuously
{
len = sizeof(client);
fd = accept(sock, (struct sockaddr*) &client, &len);
if(fd < 0)
{
printf("Accept failed\n");
}
else
{
printf("\n Process incoming connection from (%s , %d)", inet_ntoa(client.sin_addr),ntohs(client.sin_port));
break;
}
}
}
void main()
{
int data;
double Task2ms_Raster, Task10ms_Raster, Task100ms_Raster ;
CreateSocket();
Xcp_Initialize();
while(1)
{
data = recv(fd, recv_data, 99, 0);
if (data == SOCKET_ERROR) {
printf("recv failed with error %d\n", WSAGetLastError());
} else
{
pChunkData = &recv_data;
chunkLen = sizeof(pChunkData);
XcpIp_RxCallback ((uint16) chunkLen, (char*) pChunkData, (uint16) port);
}
}
}
上面是一个服务器套接字程序:我创建了一个套接字,用于接受带有 ip 地址和端口号的连接。我的程序继续接受连接,只要它接受连接,它就应该退出 for 循环。锄头使上述程序在接受连接时退出循环??
谁能帮帮我。
我修改了上面的代码并添加了主程序。接受来自客户端的连接后。然后我得到输出,因为 recv 失败并出现错误。控制将进入 while 循环并显示为 :recv failed with error 在主函数中。为什么会这样??
【问题讨论】:
-
如果您只想处理 1 个连接,只需将
break放入else部分即可。