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


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 512
char 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 512
char 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 512
char 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 512
char 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 步 向套接字中写入字符串
  }
}



相关阅读:
js图片卷帘门导航菜单特效代码分享
jQuery实现左侧导航模块的显示与隐藏效果
Win10桌面图标没了怎么办?Win10桌面快捷方式消失了解决方法
Nodejs爬虫进阶教程之异步并发控制
javascript时间函数大全
微软官方展示真正的Win10预览版10527版本信息
jQuery针对各类元素操作基础教程
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
Oracle开发之窗口函数
win10关闭防火墙后如何关闭通知?win10关闭防火墙后总是弹出通知图文解决办法(两种)
ajax异步回调函数中给外部变量赋值的问题探讨
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
javascirpt实现2个iframe之间传值的方法
jquery 判断滚动条到达了底部和顶端的方法
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 某县水务局作风效能建设公开承诺 2015发改委“三严三实”学习研讨计划 雁儿落带得胜令·饮中闲咏 手抄报带给我知识和快乐450字 由网购想到的 《皮皮,坚强!》第一章作文600字 描写家乡的英语作文 汉城湖 凡中见奇之香寮作文1500字 因为有了人海,所以相遇才显得那么意外 初中初三作文800字:友情是相知 入党申请书1000字经典范文下载 农村信用社省联社新聘员工培训个人总结 四季诗语 担子缘(三) 小伙伴胡怡然350字 奶奶感动了我作文500字 公众承诺的魔鬼力量(王阳) 不是爱情故事的故事 2013年中学校务公开年总结 别拿低头族断手党说事,自制力差才是你的软肋 玩贴彩纸游戏作文200字 读书的贪婪 描写风的比喻句 我的梦想我的梦作文750字 有关三国演义歇后语及答案 逝水流年,寂寞沧桑了伤 邻居的小鸭150字 有关西瓜的作文100字 学习科学实践发展观会议讲话范文 有一种声音作文 无声。 小学五年级作文700字:再见了我的的老师 有关新年的畅想作文:新年畅想 冷冽的风作文150字 2013年述职报告范文 精选版 2016禁酒令保证书 梦的方向叫做闯作文1200字 天那边观后感 5篇 大学生对学习、思想、工作的自我鉴定 送老婆的妇女节祝福语 记忆深处的美景作文1200字 党风建设心得体会:建设学习型党组织的基本要素 09年质监局党组述职报告 房屋拆迁安置补偿合同 生命的意义作文400字 最经典幽默短信息 BBS上精典短信9 高中高二作文1000字:君子爱财 取之有道 -用心倾听,爱情简简单单,没有潜规则。

Copyright © 2016 phpStudy |