我是套接字编程的新手,通过一些教程的帮助,我想出了一个非常基本的应用程序,但我在让服务器接收消息时遇到了问题。
我的基本理解是在服务器端,您打开一个绑定端口/IP 的套接字(在 INADDR_ANY
的情况下,绑定到任何 IP 的任何套接字都应该能够连接)。< /p>
在客户端,您也创建了一个套接字并尝试连接到指定的 IP(在本例中我选择了 google 的公共 IP)。这意味着服务器应该能够监听来自客户端套接字的数据包。
pthread_t tid[2];
char buffer[100];
void serverThread(void)
{
struct sockaddr_in serverAddr, clientAddr;
memset(&serverAddr, 0, sizeof(serverAddr));
memset(&clientAddr, 0, sizeof(clientAddr));
int socketFd = socket(AF_INET, SOCK_DGRAM, 0);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(7799);
serverAddr.sin_addr.s_addr = INADDR_ANY;
memset(serverAddr.sin_zero, '\0', sizeof(serverAddr.sin_zero));
// bind the struct to the socket
if (bind(socketFd, (struct sockaddr*) &serverAddr, sizeof(serverAddr)) < 0)
{
printf ("bind failed!\n");
}
int clientLen = sizeof(clientAddr);
while(1)
{
printf ("waiting for data by the client...\n");
recvfrom(socketFd, buffer, 100, MSG_WAITALL, (struct sockaddr*) NULL, NULL);
printf ("Client data rcvd: %s\n", buffer);
}
}
void clientThread()
{
char msg[1000];
printf ("client thread...\n");
struct sockaddr_in serverAddr;
memset(&serverAddr, 0, sizeof(serverAddr));
// open a socket over which requests will be sent to the server
int socketFd = socket(AF_INET, SOCK_DGRAM, 0);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(7799);
serverAddr.sin_addr.s_addr = inet_addr("142.251.33.78");
memset(serverAddr.sin_zero, '\0', sizeof(serverAddr.sin_zero));
// connect the socket to the server
if (connect(socketFd, (struct sockaddr *) &serverAddr, sizeof(serverAddr)) < 0)
{
printf ("connect error\n");
}
printf ("Connected to server...\n");
strcpy(msg, "Hello world!");
if(sendto(socketFd, msg, strlen(msg), 0, NULL, 0) < 0){
printf("Unable to send message\n");
}
printf ("Message sent from client...\n");
}
int main()
{
int sockfd;
char buffer[MAXLINE];
pthread_create(&tid[0], NULL, serverThread, NULL);
pthread_create(&tid[1], NULL, clientThread, NULL);
pthread_join(tid[0], NULL);
pthread_join(tid[1], NULL);
return 0;
}
输出:
server thread...
client thread...
waiting for data by the client...
Connected to server...
Message sent from client...