史啦啦 的學生作業:
【圖片】
/*
大家自己看懂老師的代碼后,自己編寫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)