【发布时间】:2022-01-05 19:31:15
【问题描述】:
我试图弄清楚如何用 C 语言做一个简单的 UDP 服务器。 我会尝试在函数的参数中给出消息以获得更好的版本。
但是我一直遇到一些基本的分段错误,我不知道这是从哪里来的,即使我尝试使用“if(error == -1)”语句进行调试。
这是我的服务器
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>
#define PORT 3000
#define MAXLINE 1000
int main(int argc, char const *argv[])
{
char buffer[100];
char *message ="hello world";
int udp_socket,len;
struct sockaddr_in servaddr,cliaddr;
//socket
udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
if (udp_socket<0){
printf("erreur de création de socket");
exit(-1);
}
//bind
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
servaddr.sin_addr.s_addr = INADDR_ANY;
int error;
error = bind(udp_socket, (struct sockaddr *)&servaddr, sizeof servaddr);
if(error == -1){
printf ("cannot get port %d",PORT);
exit(-1);
}
//recvfrom
len = sizeof(cliaddr);
int error2 = recvfrom(udp_socket,buffer,sizeof(buffer),0,(struct sockaddr*)&cliaddr,&len);
if(error2 <0){
printf ("erreur recvfrom");
exit(-1);
}
message[error2]='\0';
puts(message);
return 0;
int k = sendto(udp_socket,message,MAXLINE,0,(struct sockaddr*)&cliaddr,sizeof(cliaddr));
if (k>0) {
printf ("error sendto");
exit(-1);
}
}
这是我的客户
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>
#define PORT 3000
#define MAXLINE 1000
int main(){
char *message = "this is a test\n ";
int port = 3000;
char buffer[100];
int sockfd,n;
struct sockaddr_in servaddr;
//clear servaddr
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
servaddr.sin_port = htons(PORT);
servaddr.sin_family = AF_INET;
//create datagram socket
sockfd =socket(AF_INET,SOCK_DGRAM,0);
// connect to server
if(connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0){
printf("\n Error : Connect Failed \n");
exit(0);
}
// request to send datagram
// no need to specify server address in sendto
// connect stores the peers IP and port
sendto(sockfd, message, MAXLINE, 0, (struct sockaddr*)NULL, sizeof(servaddr));
// waiting for response
recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)NULL, NULL);
puts(buffer);
// close the descriptor
close(sockfd);
}
【问题讨论】:
标签: c networking udp