首页 > 编程 > C > 正文

C语言编写基于TCP和UDP协议的Socket通信程序示例

2020-01-26 14:40:49
字体:
来源:转载
供稿:网友

Tcp多线程服务器和客户端程序
服务器程序:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <arpa/inet.h>#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#define PORT 8082#define BUFSIZE 512char buf[BUFSIZE+1];void* fun(void* x){    //printf("enter thread!/r/n");    int new_fd=*((int*)x);  while(1)    {    int z=read(new_fd,buf,BUFSIZE);//第 6 步 读取套接字  if(z==0){printf("client close !");break;};  buf[z]='/0';  printf("%s/r/n",buf);//打印  };}int newfd[512];int inewfd=0;int main(){  //第 1 步 创建套接字  int sockfd=socket(AF_INET,SOCK_STREAM,0);  //第 2 步 设置地址结构体  struct sockaddr_in svraddr;  svraddr.sin_family=AF_INET;//使用 internet 协议  svraddr.sin_port=htons(PORT);  inet_aton("0.0.0.0",&svraddr.sin_addr);  //第 3 步 绑定  int ret=bind(sockfd,(struct sockaddr*)&svraddr,sizeof(svraddr));    if(ret<0){printf("error bind!/r/n");exit(-1);};  //第 4 步 监听  listen(sockfd,128);  while(1)  {  newfd[inewfd++]=accept(sockfd,NULL,NULL); //第 5 步 接收  pthread_t ntid;    pthread_create(&ntid,NULL,fun,(void*)&(newfd[inewfd-1]));   }}

注意:

gcc server.c -o server -lpthread

客户端程序 cli.c

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <arpa/inet.h>#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#define PORT 8082#define BUFSIZE 512char buf[BUFSIZE+1];int main(){  //第 1 步 创建一个体套接字  int sockfd=socket(AF_INET,SOCK_STREAM,0);  //第 2 步 设置 addr 结构体  struct sockaddr_in svraddr;  svraddr.sin_family=AF_INET;//使用 internet 协议  svraddr.sin_port=htons(PORT);  inet_aton("127.0.0.1",&svraddr.sin_addr);  //第 3 步 连接服务器  connect(sockfd,(struct sockaddr*)&svraddr,sizeof(svraddr));  while(1)  {  scanf("%s",buf);  write(sockfd,buf,strlen(buf)); //第 4 步 向套接字中写入字符串  }}


Udp的服务器程序和客户端程序

服务器程序:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <arpa/inet.h>#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#define PORT 8082#define BUFSIZE 512char buf[BUFSIZE+1];int main(){  //第 1 步 创建套接字  int sockfd=socket(AF_INET,SOCK_DGRAM,0);  //第 2 步 设置地址结构体  struct sockaddr_in svraddr;  svraddr.sin_family=AF_INET;//使用 internet 协议  svraddr.sin_port=htons(PORT);  inet_aton("0.0.0.0",&svraddr.sin_addr);  //第 3 步 绑定  int ret=bind(sockfd,(struct sockaddr*)&svraddr,sizeof(svraddr));  if(ret<0){printf("cannot bind!/r/n");exit(-1);};  while(1)  {        struct sockaddr_in cli;        int len=sizeof(cli);    int z=recvfrom(sockfd,buf,BUFSIZE,0,(struct sockaddr*)&cli,&len);//第 6 步 读取套接字      buf[z]='/0';    printf("%s/r/n",buf);//打印  }}

客户端程序 cli.c

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <arpa/inet.h>#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#define PORT 8082#define BUFSIZE 512char buf[BUFSIZE+1];int main(){  //第 1 步 创建一个体套接字  int sockfd=socket(AF_INET,SOCK_DGRAM,0);  //第 2 步 设置 addr 结构体  struct sockaddr_in svraddr;  svraddr.sin_family=AF_INET;//使用 internet 协议  svraddr.sin_port=htons(PORT);  inet_aton("127.0.0.1",&svraddr.sin_addr);  //第 3 步 连接服务器  //connect(sockfd,(struct sockaddr*)&svraddr,sizeof(svraddr));  while(1)  {  scanf("%s",buf);  sendto(sockfd,buf,strlen(buf),0,(struct sockaddr*)&svraddr,sizeof(svraddr)); //第 4 步 向套接字中写入字符串  }}

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选