C语言实现UDP连接的参考代码

C语言实现UDP连接的参考代码,Client连接上Server后将自己所在目录下的"liu"文件中的前三行文字发送到Server端去,然后Server负责接收和显示。

/**************server.c**************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<netdb.h>
#include<errno.h>
#include<sys/types.h>
int port=8888;
int main(){
   int sockfd;
   int len;
   int z;
   char buf[256];
   struct sockaddr_in adr_inet;
   struct sockaddr_in adr_clnt;
   printf("waiting for client...\n");
   adr_inet.sin_family=AF_INET;
   adr_inet.sin_port=htons(port);
   adr_inet.sin_addr.s_addr=htonl(INADDR_ANY);
   bzero(&(adr_inet.sin_zero),8);
   len=sizeof(adr_clnt);
   sockfd=socket(AF_INET,SOCK_DGRAM,0);
   if(sockfd==-1){
     perror("socket error_1");
     exit(1);
   }
   z=bind(sockfd,(struct sockaddr *)&adr_inet,sizeof(adr_inet));
   if(z==-1){
     perror("bind error_1");
     exit(1);
   }
   while(1){
     z=recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&adr_clnt,&len);
     if(z<0){
       perror("recvfrom error_1");
       exit(1);
     }
     buf[z]=0;
     printf("接收:%s",buf);
     if(strncmp(buf,"stop",4)==0){
       printf("结束....\n");
       break;
     }
   }
   close(sockfd);
   exit(0);
}

/***************client.c***************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<netdb.h>
#include<errno.h>
#include<sys/types.h>
int port=8888;

int main(int argc,char *argv[]){
  int sockfd;
  int i=0;
  int z;
  char buf[80],str1[80];
  struct hostent *host;
  struct sockaddr_in adr_srvr;
  if(argc<2){
    fprintf(stderr,"please enter the server's hostname!\n");
    exit(1);
  }
  if((host=gethostbyname(argv[1]))==NULL){
    herror("gethostbyname error!");
    exit(1);
  }
  FILE *fp;
  printf("open file....\n");
  fp=fopen("liu","r");
  if(fp==NULL){
    perror("failed to open file");
    exit(1);
  }
  printf("connecting server....\n");
  adr_srvr.sin_family=AF_INET;
  adr_srvr.sin_port=htons(port);
  adr_srvr.sin_addr=*((struct in_addr *)host->h_addr);
  bzero(&(adr_srvr.sin_zero),8);
  sockfd=socket(AF_INET,SOCK_DGRAM,0);
  if(sockfd==-1){
    perror("socket error!");
    exit(1);
  }
  printf("send file ...\n");
  for(i=0;i<3;i++){
     fgets(str1,80,fp);
     printf("%d:%s",i,str1);
     sprintf(buf,"%d:%s",i,str1);
     z=sendto(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&adr_srvr,sizeof(adr_srvr));
     if(z<0){
       perror("recvfrom error");
       exit(1);
     }
  }
  printf("send ....\n");
  sprintf(buf,"stop\n");
  z=sendto(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&adr_srvr,sizeof(adr_srvr));
  if(z<0){
    perror("sendto error");
    exit(1);
  }
  fclose(fp);
  close(sockfd);
  exit(0);
}

运行截图:

Server端:

Client端:

(————完————)

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
对于C语言来说,可以使用Socket编程来实现TCP和UDP网络通信。 1. TCP实现: - 首先,创建一个TCP服务器和客户端的Socket对象: ```c int serverSocket = socket(AF_INET, SOCK_STREAM, 0); int clientSocket = socket(AF_INET, SOCK_STREAM, 0); ``` - 然后,设置服务器和客户端的地址结构: ```c struct sockaddr_in serverAddr; struct sockaddr_in clientAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(port); // 设置端口号 serverAddr.sin_addr.s_addr = INADDR_ANY; clientAddr.sin_family = AF_INET; clientAddr.sin_port = htons(port); // 设置服务器端口号 clientAddr.sin_addr.s_addr = inet_addr(serverIP); // 设置服务器IP ``` - 接下来,绑定服务器Socket到地址和端口: ```c bind(serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)); ``` - 然后,监听客户端连接请求: ```c listen(serverSocket, 5); // 同时处理5个连接请求 ``` - 客户端连接服务器: ```c connect(clientSocket, (struct sockaddr *)&clientAddr, sizeof(clientAddr)); ``` - 进行读写操作,收发数据: ```c // 服务器端 int clientSocket = accept(serverSocket, NULL, NULL); // 接受客户端连接请求 char buffer[1024]; recv(clientSocket, buffer, sizeof(buffer), 0); // 接收数据 send(clientSocket, buffer, sizeof(buffer), 0); // 发送数据 // 客户端 char buffer[1024]; send(clientSocket, buffer, sizeof(buffer), 0); // 发送数据 recv(clientSocket, buffer, sizeof(buffer), 0); // 接收数据 ``` 2. UDP实现: - 首先,创建一个UDP服务器和客户端的Socket对象: ```c int serverSocket = socket(AF_INET, SOCK_DGRAM, 0); int clientSocket = socket(AF_INET, SOCK_DGRAM, 0); ``` - 然后,设置服务器和客户端的地址结构: ```c struct sockaddr_in serverAddr; struct sockaddr_in clientAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(port); // 设置端口号 serverAddr.sin_addr.s_addr = INADDR_ANY; clientAddr.sin_family = AF_INET; clientAddr.sin_port = htons(port); // 设置服务器端口号 clientAddr.sin_addr.s_addr = inet_addr(serverIP); // 设置服务器IP ``` - 接下来,绑定服务器Socket到地址和端口: ```c bind(serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)); ``` - 进行读写操作,收发数据: ```c // 服务器端 char buffer[1024]; struct sockaddr_in clientAddr; int len = sizeof(clientAddr); recvfrom(serverSocket, buffer, sizeof(buffer), 0, (struct sockaddr *)&clientAddr, &len); // 接收数据 sendto(serverSocket, buffer, sizeof(buffer), 0, (struct sockaddr *)&clientAddr, len); // 发送数据 // 客户端 char buffer[1024]; sendto(clientSocket, buffer, sizeof(buffer), 0, (struct sockaddr *)&serverAddr, sizeof(serverAddr)); // 发送数据 recvfrom(clientSocket, buffer, sizeof(buffer), 0, NULL, NULL); // 接收数据 ``` 以上是简单的示例代码实现了基本的TCP和UDP通信功能。在实际应用中,可能还需要处理异常情况、错误处理、多线程等。对于更详细的实现,请参考相关网络编程的教程和文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值