C语言实现Socket简单通信

2023-05-16

环境是linux,不过应该没什么影响,因为只用到了socket的基本用法,没有涉及pthread等。

分为服务器端和客户端,服务器端监听端口发来的请求,收到后向客户端发送一个Hello World,客户机负责发送消息并打印收到的Hello World.

服务器步骤:建立socket,绑定socket和地址信息,开启监听,收到请求后发送数据。

客户端步骤:建立socket,连接服务器端,接收并打印服务器给的数据。

(下面代码中所有方法返回-1表示失败)


直接上代码:

服务器:

#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>

#define PORT 1500//端口号 
#define BACKLOG 5/*最大监听数*/ 

int main(){
	int sockfd,new_fd;/*socket句柄和建立连接后的句柄*/
	struct sockaddr_in my_addr;/*本方地址信息结构体,下面有具体的属性赋值*/
	struct sockaddr_in their_addr;/*对方地址信息*/
	int sin_size;

	sockfd=socket(AF_INET,SOCK_STREAM,0);//建立socket 
	if(sockfd==-1){
		printf("socket failed:%d",errno);
		return -1;
	}
	my_addr.sin_family=AF_INET;/*该属性表示接收本机或其他机器传输*/
	my_addr.sin_port=htons(PORT);/*端口号*/
	my_addr.sin_addr.s_addr=htonl(INADDR_ANY);/*IP,括号内容表示本机IP*/
	bzero(&(my_addr.sin_zero),8);/*将其他属性置0*/
	if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr))<0){//绑定地址结构体和socket
		printf("bind error");
		return -1;
	}
    	listen(sockfd,BACKLOG);//开启监听 ,第二个参数是最大监听数 
    	while(1){
    		sin_size=sizeof(struct sockaddr_in);
    		new_fd=accept(sockfd,(struct sockaddr*)&their_addr,&sin_size);//在这里阻塞知道接收到消息,参数分别是socket句柄,接收到的地址信息以及大小 
    		if(new_fd==-1){
    			printf("receive failed");
		} else{
			printf("receive success");
			send(new_fd,"Hello World!",12,0);//发送内容,参数分别是连接句柄,内容,大小,其他信息(设为0即可) 
		}
	}
	return 0;
} 


客户端:

#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>

 
#define DEST_PORT 1500//目标地址端口号 
#define DEST_IP "127.0.0.1"/*目标地址IP,这里设为本机*/ 
#define MAX_DATA 100//接收到的数据最大程度 

int main(){
	int sockfd,new_fd;/*cocket句柄和接受到连接后的句柄 */
	struct sockaddr_in dest_addr;/*目标地址信息*/
	char buf[MAX_DATA];//储存接收数据 

	sockfd=socket(AF_INET,SOCK_STREAM,0);/*建立socket*/
	if(sockfd==-1){
		printf("socket failed:%d",errno);
	}


	//参数意义见上面服务器端 
	dest_addr.sin_family=AF_INET;
 	dest_addr.sin_port=htons(DEST_PORT);
	dest_addr.sin_addr.s_addr=inet_addr(DEST_IP);
	bzero(&(dest_addr.sin_zero),8);
	
	if(connect(sockfd,(struct sockaddr*)&dest_addr,sizeof(struct sockaddr))==-1){//连接方法,传入句柄,目标地址和大小 
		printf("connect failed:%d",errno);//失败时可以打印errno 
	} else{
		printf("connect success");
		recv(sockfd,buf,MAX_DATA,0);//将接收数据打入buf,参数分别是句柄,储存处,最大长度,其他信息(设为0即可)。 
		printf("Received:%s",buf);
	}
	close(sockfd);//关闭socket 
	return 0;
} 



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言实现Socket简单通信 的相关文章

  • STM32F103 实例应用——实现透传转发串口

    一 预期准备 实现机制 xff1a 空闲中断 43 DMA中断接收不定长串口数据 开发工具 xff1a STM32F103芯片 xff0c keil5 xff0c usb转ttl工具 预计实现效果 xff1a 串口1接收数据然后透传给串口2
  • 解决:ORA-06550 字符串长度限制在范围 (1...32767)

    错误信息 ORA 06550 第 1 行 第 782 列 PLS 00215 字符串长度限制在范围 1 32767 解决 本例是配置存储过程job的job action 61 gt 39 Declare FLAG Number 20 FAI
  • gcc、make、makefile、cmake、cmakelists区别

    转自 xff1a http www zhihu com question 36609459 辉常哥 1 gcc是GNU Compiler Collection xff08 就是GNU编译器套件 xff09 xff0c 也可以简单认为是编译器
  • FIFO和DMA

    FIFO SPI端口增加了FIFO xff0c 使得传输数据有了缓冲区间 FIFO存储器是一个先入先出的双口缓冲器 xff0c 即第一个进入其内的数据第一个被移出 xff0c 其中一个存储器的输入口 xff0c 另一个口是存储器的输出口 主
  • 蓝桥杯C语言基础练习 十进制转十六进制

    代码 xff08 解法类似十进制转二 八进制 xff09 include lt stdio h gt char getnum int z switch z case 0 return 39 0 39 break case 1 return
  • Linux和Windows下使用printf的差别

    1 Linux系统下 一般而言 xff0c 大家都知道printf是带有行缓冲的函数 xff0c printf把打印的消息先输出到行缓冲区 xff0c 在以下几种情况下 xff1a 1 程序结束时调用exit 0 return xff1b
  • Could not connect ot Redis No route to host问题解决

    局域网内访问另外一台服务器上的redis 报错 Could not connect to Redis No route to host 问题解决 发现是防火墙问题 于是设置 iptables N REDIS iptables A REDIS
  • 大数据挑战赛-鼠标轨迹识别

    大数据挑战赛 鼠标轨迹识别 xff0c 竞赛官网 xff1a http bdc saikr com c cql 34541 1 我们看一下整个竞赛的详情 赛题描述 鼠标轨迹识别当前广泛运用于多种人机验证产品中 xff0c 不仅便于用户的理解
  • 暴力破解字典列表

    GitHub上的 xff1a https github com danielmiessler SecLists tree master Passwords Leaked Databases https github com duyetdev
  • Burpsuite技巧之MD5加密密码爆破、带验证码爆破

    一 Burpsuite技巧之MD5加密密码爆破 现在有很多后台都不再是明文传输 xff0c 改成了各种各样的加密方式 今天就拿MD5加密方式做一个演示 xff0c 举一反三 xff0c 希望对新手有用 如图 xff0c MD5加密了密码 x
  • 解决ubuntu连不上网络,输入ifconfig只显示本地环回问题

    使用虚拟机打开ubuntu后发现无法连接网络 首先我使用了ping www baidu com 然后通过命令sudo service network manager restart重启服务后仍然没有用 于是输入命令ifconfig查看网卡
  • https://mp.weixin.qq.com/s/ilO6DZwRpWdrruKm4J8CMw

    近日安全漏洞频发 xff0c 小编在此收集了近期大家会比较关注的漏洞 xff0c 做个总结 xff0c 供大家查漏补缺 xff0c 若有缺失 xff0c 欢迎留言补充 目录 一 OA系统 二 E mail 三 Web中间件 四 源代码管理
  • 浅谈JavaScript、ES5、ES6

    什么是JavaScript JavaScript一种动态类型 弱类型 基于原型的客户端脚本语言 xff0c 用来给HTML网页增加动态功能 xff08 好吧 xff0c 概念什么最讨厌了 xff09 动态 xff1a 在运行时确定数据类型
  • js声明变量的三种方式

    JS 声明变量的三种方式 xff08 1 xff09 使用变量步骤 xff1a a 声明 gt b 赋值 gt 3 调用 正确用法 xff1a lt script type 61 34 text javascript 34 gt 方式一 x
  • JS中[感叹号]function(){}()的理解

    这种写法 xff0c 是一种 96 立即执行函数 96 的写法 xff0c 即IIFE等设计模式 这种函数在函数定义的地方就直接执行了 理解IIFE设计模式的关键是要认识到 xff0c 在ES6之前 xff0c JavaScript仅具有函
  • Python:查找字符在字符串中的位置

    str 1 61 39 wo shi yi zhi da da niu 39 char 1 61 39 i 39 nPos 61 str 1 index char 1 print nPos 运行结果 xff1a 7 61 61 61 61
  • Multipart/form-data POST文件上传详解

    理论 简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交数据 xff0c 都是通过form表达提交的 xff0c 代码如下 lt form method 61 34 post 34 action 61 34 http w
  • IIS6、IIS7和IIS8各版本的差别

    一 写在前面 目前市面上所用的IIS版本估计都是 gt 61 6 0的 所以我们主要以下面三个版本进行讲解 服务器版本IIS默认版本server20036 0server20087 0server20128 0 二 IIS6的请求过程 由图
  • Http请求头中X-Requested-With的含义

    昨天看代码的时候 xff0c 看到了这个一句 String requestedWith 61 HttpServletRequest request getHeader 34 X Requested With 34 X Requested W
  • 云台、RS485简介与区别

    云台 云台 xff08 Pan amp Tilt amp Zoom xff09 xff0c 缩写为PTZ 云台就是两个交流电机组成的安装平台 xff0c 可以分别围绕一中心轴作水平和垂直的运动 xff0c 将摄像机安装于其上 xff0c 实

随机推荐

  • ubuntu14.04版本下ulimit连接数限制的解决方法

    Linux对于每个用户 xff0c 系统限制其最大进程数 为提高性能 xff0c 可以根据设备资源情况 xff0c 设置各linux 用户的最大进程数 可以使用ulimit a查看当前限制 xff1a 对于一些服务的资源限制 xff0c 如
  • 防止全局变量重复定义

    问题 xff1a 在 h文件中定义了全局变量 并用 ifndef identifier h define identifier h endif 但是依然出现重复定义问题 分析 xff1a ifndef这套条件编译是为了防止同一个 c文件中包
  • Checksum 校验和

    一 校验数据的一般算法比较 都是通过对数据进行校验产生一个校验值 xff0c 用来校验数据完整性 不同点 xff1a 算法不同 CRC采用多项式除法 xff0c MD5和SHA1使用的是替换 轮转等方法 xff1b 校验值的长度不同 CRC
  • GPIO小综合-按键实验

    之前用寄存器操作实现了跑马灯和蜂鸣器 这次接着输入寄存器IDR捕获按键 并且综合亮灯和发出声音 xff0c 作为寄存器GPIO小综合练习 首先查KEY的电路图 xff0c 分别用到了ACD几个时钟 KEY0对应PC8 xff0c KEY1对
  • 数据结构入门

    概念 数据 Data xff1a 是客观事物的符号表示 在计算机科学中指的是所有能输入到计算机中并被计算机程序处理的符号的总称 数据元素 Data Element xff1a 是数据的基本单位 xff0c 在程序中通常作为一个整体来进行考虑
  • Linux系统发布项目完整教程

    目录 1 后端代码打包 1 1后端代码中文件上传路径修改 1 2 后端代码打包 1 3 后端项目发布 2 前端静态资源打包 2 1 项目中关于路径修改的说明 2 2模拟域名访问的设置 修改HOSTS文件 2 3 前端请求路径修改 2 4 前
  • 畸变校正与极线校正(具体原理+Matlab代码)

    附 xff1a 相关需要的工具函数源代码 xff08 投影函数 校正矩阵计算等 xff09 见最下面 1 畸变校正 1 1 形成原因 图像畸变一般有两种 xff0c 第一种是透镜本身的形状有问题 xff0c 使得图像发生径向畸变 xff1b
  • c++的http请求

    include lt iostream gt include lt fstream gt include lt cstdlib gt include lt cstring gt include lt sys socket h gt incl
  • stl智能指针和boost智能指针对比

    先说说stl中的智能指针auto ptr xff0c 先说说auto ptr的特点 std auto ptr用来管理单个堆内存对象 xff0c 但是独享所有权 xff0c 且不允许赋值和拷贝 xff08 没有重载operator 61 xf
  • boost库noncopyable简介

    前言 看了一段时间的UNP对Linux下网络编程有了一定程度的理解 xff0c 经学长推荐 xff0c 开始学习陈硕老师的 Linux多线程服务端编程 看之前特地上了知乎 xff0c 阅读者需要具备一定的C 43 43 和网络编程基础 xf
  • 车道线检测和基于RGB交通标志检测系统

    好久好久好久没更新博客了 今天是冬至 首先跟大家说一声 冬至快乐 冬至吃过汤圆 又长了一岁 感觉真的时不待人 好像自己什么事情也没有完成 也没留下一些什么东西 所以今天就想来写写博客 我是分割线 运行环境 Win7系统64位 运行平台 Qt
  • c++中h文件和lib有什么区别

    转自 xff1a https zhidao baidu com question 510969923 html 1 lib 是若干个obj的集合 xff0c 本质与obj相同 xff01 lib有静态lib和动态lib之分 静态lib将导出
  • cmake在Windows上的使用

    cmake介绍 cmake是一个构建C 43 43 代码的跨平台工具 xff0c 他能够干什么呢 xff1f 他能够搜索你的平台环境 xff0c 然后生成平台上用于Build的文件 在Windows上安装了Visual Studio 他能够
  • ubuntu系统安装完nvidia显卡驱动后黑屏,不能进入系统

    昨天想看显卡 xff0c 更新了下驱动 xff0c 发现服务器重启进不去 步骤 1 开机按esc 进入 选项界面2 进去以后选择一个括号里面带recovery mode的选项3 然后它自动黑屏出现代码 xff0c 然后弹出一个选择框 xff
  • ubuntu18.04下cmake的安装

    一 使用安装命令 span class token function sudo span span class token function apt span span class token function install span c
  • Nginx/Lighttpd/Apache三大web服务器对比分析

    一 xff0e 软件介绍 apache lighttpd nginx 1 lighttpd Lighttpd是一个具有非常低的内存开销 xff0c cpu占用率低 xff0c 效能好 xff0c 以及丰富的模块等特点 lighttpd是众多
  • STM32学习笔记八——串口实现不定长数据传输

    生命不息 xff0c 奋斗不止 0 摘要 今天说一下STM32单片机的接收不定长度字节数据的方法 由于STM32单片机带IDLE中断 xff0c 所以利用这个中断 xff0c 可以接收不定长字节的数据 xff0c 由于STM32属于ARM单
  • linux shell 字符串长度

    本篇内容主要包括以下内容 xff1a 获取字符串长度的方法 各方法间性能比较 相关内容补充 说明 xff1a 本篇内容为学习shell 编程 老男孩教程 笔记 xff0c 部分内容为相关视频课程内容 xff0c 补充部分是我查资料所得 xf
  • measurement studio测控与单片机通信上位机

    using NationalInstruments Analysis using NationalInstruments Analysis Conversion using NationalInstruments Analysis Dsp
  • C语言实现Socket简单通信

    环境是linux xff0c 不过应该没什么影响 xff0c 因为只用到了socket的基本用法 xff0c 没有涉及pthread等 分为服务器端和客户端 xff0c 服务器端监听端口发来的请求 xff0c 收到后向客户端发送一个Hell