• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C语言编写基于TCP和UDP协议的Socket通信程序示例

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

作者:陈仲阳0 字体:[增加 减小] 来源:互联网 时间:2017-05-28

陈仲阳0 通过本文主要向大家介绍了tcp/udp socket,socket编程 tcp/udp,tcp与udp的主要区别,tcp和udp是什么意思,udp和tcp的区别等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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])); 
  }
}

</div>

注意:

gcc server.c -o server -lpthread
</div>

客户端程序 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 步 向套接字中写入字符串
  }
}
</div>


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);//打印
  }

}

</div>

客户端程序 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 步 向套接字中写入字符串
  }
}
</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

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

相关文章

  • 2017-05-28浅谈c++调用python链接的问题及解决方法
  • 2017-05-28C++虚函数表实例分析
  • 2017-05-28C++中重载、重写(覆盖)和隐藏的区别实例分析
  • 2017-05-28C++/Php/Python/Shell 程序按行读取文件或者控制台的实现
  • 2017-05-28VC读配置文件实例
  • 2017-05-28c++中vector&lt;int&gt;和vector&lt;int*&gt;的用法区别
  • 2017-05-28C语言中的malloc使用详解
  • 2017-05-28C++删除指定文件夹下N天及之前日志文件的方法
  • 2017-05-28C语言 存储类详解及示例代码
  • 2017-05-28C++类中的static和const用法实例教程

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C语言 扫雷程序的实现
    • C语言游戏必备:光标定位与颜色设置的实现方法
    • 浅析C/C++中动态链接库的创建和调用
    • C++实现修改函数代码HOOK的封装方法
    • 浅谈C++基类的析构函数为虚函数
    • C++中指针指向二维数组实例详解
    • C++实现十六进制字符串转换为十进制整数的方法
    • C语言中 值传递和指针传递实例详解
    • C语言安全之数组长度与指针实例解析
    • C++里最容易忽视却不能忽视的问题(必看)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有