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 交通频道 作文范文 冬天搞笑祝福短信 百度散文网·春思有感梅林诗词散文文学集 滑旱冰作文 人教版高中第四册第三单元作文:美与丑作文1600字 多么痛的领悟 母爱,一生的财富 初中初一作文700字:我和我的朋友(转载) 莫言月光斩读后感 教师九一八爱国演讲稿精选 4 篇汇编 谢谢,牵风筝的线 多元智能读后感 感悟:人生如棋 妈妈的痛作文800字 送情人的平安夜祝福短信 菩提树下,一指清音 西江月(800字) 履行司法行政职能优化区域投资环境 小学六年级作文600字:除夕夜的烟花 教育局双争活动工作总结 大学生如何在求职面试时做好自我介绍 初中初二作文550字:读《钢铁是怎样炼成的》有感 惊喜的发现的已作文600字 小学四年级作文750字:看《五月 等待,无关风月 一起种下一份快乐作文900字 潦草的長發,潦草的人生 小学六年级日记:我真是冤啊! 随时都有人能替代你 2016林业局纪检组组长述职报告 夏天的炽热,雨天的阴沉,雨后的彩虹 我能给你什么我的孩子 又是樱花飞舞时 谷底蒺藜(四十) 关爱农民工子女暑期实践活动方案 万顷芳华 搞笑版穿越火线之保家卫国上作文200字 歌唱我的梦作文600字 我喜欢的小动物——蹦蹦和跳跳作文400字 毕业了,关上宿舍的门 我的“死党”们作文600字 暇想……作文200字 又到冬风轻扬时作文600字 小学语文一年级上册教学计划 快乐积极向上的句子 初三年级期末语文作文900字:向你呼喊 让世界充满爱1200字 校园红领巾广播稿投稿优秀稿件--观《感动中国》有感 小学一年级作文200字:铅笔 城市环境卫生设施设置标准 2013年12月客服个人工作总结

Copyright © 2016 phpStudy |