史啦啦 的学生作业:
【图片】
/*
大家自己看懂老师的代码后,自己编写udp多进程并发服务器的代码。并和网络调试助手调试成功后。
把服务器相关代码上传即可。
*
* */
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PORT 9090
#define SERVER_IP "192.168.1.4"
#define BUFF_SIEZ 1024
void handle_client(int sockfd,struct sockaddr_in client_addr,char *buffer)
{
pid_t pid = fork();
if(pid == 0)
{
char client_ip[INET_ADDRSTRLEN];
inet_ntop(AF_INET,&(client_addr.sin_addr),client_ip,INET_ADDRSTRLEN);
int client_port = ntohs(client_addr.sin_port);
printf("[PID : %d]收到来自 %s:%d 的请求\n",getpid(),client_ip,client_port);
for(int i = 0;i < strlen(buffer);i++)
{
buffer[i] = buffer[i];
}
sendto(sockfd,buffer,strlen(buffer),0,(struct sockaddr *)&client_addr,sizeof(client_addr));
//printf("[PID:%d]已发送相应\n",getpid());
printf("===============================\n");
printf("user IP : %s\n",inet_ntoa(client_addr.sin_addr));
printf("user port : %d\n", ntohs(client_addr.sin_port));
printf("user data : %s\n",buffer);
exit(0);
}
}
int main()
{
int sockfd;
struct sockaddr_in server_addr,client_addr;
socklen_t addr_len = sizeof(client_addr);
char buffer[BUFF_SIEZ];
if((sockfd = socket(AF_INET,SOCK_DGRAM,0)) < 0)
{
perror("socket创建失败");
exit(EXIT_FAILURE);
}
//修改服务器地址配置
memset(&server_addr,0,sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
//将ip地址从字符串转换为网络格式
if(inet_pton(AF_INET,SERVER_IP,&server_addr.sin_addr)