Socket的最简单TCP服务器问题
初学Socket,书上举的是Socket写TCP的服务端和客户端。
客户端的代码不重要,下面是服务端的代码:
int main()
{
WSADATA data;
WORD w = MAKEWORD(2, 0);
char sztext[] = "Welcome\r\n";
WSAStartup(w, &data);
SOCKET s, s1;
s = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in addr, addr2;
int n = sizeof(addr2);
addr.sin_family = AF_INET;
addr.sin_port = htons(1025);
addr.sin_addr.S_un.S_addr = INADDR_ANY;
bind(s, (sockaddr*)&addr, sizeof(addr));
listen(s, 5);
printf("服务端已启动\r\n");
while(true)
{
s1 = accept(s, (sockaddr*)&addr2, &n);
if (s1 != NULL)
{
printf("%s connected\r\n", inet_ntoa(addr2.sin_addr));
send(s1, sztext, sizeof(sztext), 0);
}
closesocket(s);
closesocket(s1);
WSACleanup();
if (getchar())
{
return 0;
}
else
{
Sleep(100);
}
}
}
先运行服务端再运行客户端的话就会显示通信成功。
小弟有个疑问,就是红色的那行代码,当第1次运行while循环时若客户端还未连接,那么就会运行closesocket(s),那么到第2次运行while循环时,为什么accept还是能调用成功呢?