仅仅是一个 示例,可是先执行server 后执行 client ,server还是没有收到消息。问题出在哪里呢
Server.c
#include "server.h"
#define PORT 2345
#define IP "192.168.0.114"
int main (void)
{
int fd;
struct sockaddr_in servaddr, cliaddr;
char buf[BUFFER_SIZE];
socklen_t peerlen;
//建立socket连接
fd = socket(AF_INET, SOCK_DGRAM, 0);
if(fd == -1)
{
printf("fd error!\n");
return -1;
}
//设置sockaddr_in参数
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
servaddr.sin_addr.s_addr = inet_addr(IP);
//绑定
bind(fd, (struct sockaddr *)&servaddr, sizeof(servaddr));
if(bind < 0)
{
printf("bind error~!\n");
return -1;
}
//调用recvfroom,等待接收客户端数据
peerlen = sizeof(cliaddr);
while(1)
{
printf("Begin recv!\n");
recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *)&cliaddr ,&peerlen);
printf("recv form client %s \n", buf);
strcpy(buf, "Welcome to server");
sendto(fd, &buf, sizeof(buf), 0, (struct sockaddr *)&cliaddr ,peerlen);
}
close(fd);
return 0;
}
client.c:
#include "client.h"
#define PORT 2345
#define IP "192.168.0.114"
int main (void)
{
int fd;
struct sockaddr_in servaddr;
char buf[BUFFER_SIZE] = "Hello Server!";
//建立socket连接
fd = socket(AF_INET, SOCK_DGRAM, 0);
if(fd == -1)
{
printf("fd error \n");
exit(-1);
}
//设置sockaddr_in参数
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
servaddr.sin_addr.s_addr = inet_addr(IP);
//向服务器发送消息
sendto(fd, buf, sizeof(buf), 0 ,(struct sockaddr *)&servaddr,sizeof(servaddr));
printf("Send message to Sever!\n");
//接收服务器消息
printf("Begin recv!\n");
recvfrom(fd, buf, sizeof(buf), 0 ,NULL ,NULL);
if(recvfrom < 0)
{
printf("recv error!\n");
return 1;
}
printf("recv from Server %s \n", buf);
close(fd);
return 0;
}