网络编程5:socket服务端和客户端代码实现 微信小程序 蓝牙重连异常 errCode:10004,errMsg:notifyBLECharacteristicValueChange:fail setNot 蓝桥杯--第八届省赛试题-电子钟程序设计 【TCP回声服务器】一篇文章帮助你看懂TCP! 关于国标GB28181流媒体协议视频平台EasyGBS设备无法接入平台的问题排查 机器学习16 -- Lifelong Learning 终生学习 Vuex中发送mock请求返回数据 JS 正则表达式详解 学习笔记 花了30分钟,给女朋友们写了个最近抖音很火的3D立体动态相册 这 16 个 CSS 伪类,助你提升布局效率! Mysql系列第八讲 详解排序和分页(order by & limit)及存在的坑 SQL语句的一些应用语句 介绍三个开发技术小知识点 数据库系统概论(1) Mysql备份和恢复的类型,备份恢复的几种方法! --个人整理 MySql数据库基本操作(一) 前八月融合创新提升服务,大数据搭建信息网 长三角税收一体化按下“快进键” 一些建议:给当年刚做程序员的我 谁是物联网江湖明日之星?答案是新CIoT 企业信用有效“变现” 江苏银行物联网金融规模达185亿 2020年中国5G物联网行业:中国通信运营商5G投资达1.23万亿元-可下载 搭建 GFS 分布式文件系统-----实操 排障集锦:九九八十一难之第十五难!-------------史上最全rsync报错详解 docker系列1---docker隔离和限制技术 Linux系统安全及应用加固———最适合新手学,新手都能看懂!超详细的理论+超详细的实验!呕心沥血之作完成! LAMP架构集成ownCloud搭建私有云盘 Shell脚本正则表达式(一) Linux第一人称侵入进程的好地方 Windows DOS常用命令(持续更新完善) 大数据驱动新材料研发 变革从内而发,一站式大数据平台和多模数据库雄起 雕佛像、打棒球、开飞机、去北极,这个90后程序员有点不一样 12项特色功能构建施工现场“物联网” 400亿美元!英伟达收购Arm 软银套现离场物联网梦醒 卫星物联网再次引发热议,原因在这里 信用飞:航旅行业数字化前景可期,大数据预防砍头息乱象 大数据加持自动驾驶产业发展 上海智能网联汽车公共数据中心揭牌 恒久科技(002808.SZ):子公司闽保信息与鸿达兴业签署智能制造及大数据平台综合应用项目战略合作框架协议 工业平板电脑如何在物联网中发挥作用? 400亿美元!英伟达收购Arm 软银套现离场物联网梦醒 “数字心脏”动态解析消费密码——国家级消费市场大数据联合实验 重庆:大数据智能化牵引产业结构调整质效提升 分析物联网技术在智能家居中的应用场景 国家级消费市场大数据联合实验室在上海先行先试 山西吕梁培训搬迁户成为大数据标注员 昔日贫困户,玩转高科技 知乎热议:2020年程序员是否过剩? 柯建东:宁波抢抓工业物联网新机遇,要做好四个平台建设 旷视:城市物联网的实现,是从超级应用到操作系统的沉淀过程 排障集合———忘记原密码,如何重新修改MySQL登入密码 【Redis】主从复制
您的位置:首页 >开发 >

网络编程5:socket服务端和客户端代码实现

socket服务器和客户端代码实现

服务器代码

#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>//#include <linux/in.h>//与下一行冲突#include <netinet/in.h>#include <arpa/inet.h>#include <stdlib.h>#include <string.h>int main(){//1.socket:获取套接字 int s_fd; s_fd=socket(AF_INET,SOCK_STREAM,0); if(s_fd==-1) {perror("socket");exit(-1); } //2.bind:绑定IP地址和端口号 struct sockaddr_in s_addr;//在头文件#include <linux/in.h>当中定义的结构体 memset(&s_addr,0,sizeof(struct sockaddr_in));//清空 s_addr.sin_family=AF_INET;//绑定ip地址 s_addr.sin_port=htons(8988);//5000-9000为端口号,端口号需要转化为网络字节序 //s_addr.sin_addr.s_addr=inet_aton("127.0.0.1");//IP地址结构体,并转化。错误格式 inet_aton("172.20.10.3",&s_addr.sin_addr);//正确格式:对结构体取地址,再转换 bind(s_fd, (struct sockaddr *)&s_addr, sizeof(struct sockaddr_in)); //3.listen:监听是否有客户端到来 listen(s_fd,10);//监听10个 //4.accept:接受 int clen = sizeof(struct sockaddr_in); struct sockaddr_in c_addr; memset(&c_addr,0,sizeof(struct sockaddr_in));//清空 int c_fd=accept(s_fd,(struct sockaddr *)&c_addr,&clen);//通过套接字接受客户端,句柄换用c_fd if(c_fd == -1) {perror("accept"); } printf("get connext:%s\n",inet_ntoa(c_addr.sin_addr)); //5/read:读取数据 char readbuf[128]; int n_read=read(c_fd,readbuf,128); if(n_read == -1) {perror("read"); }else {printf("get message: %d,%s\n",n_read,readbuf); } //6.write:发送数据--- 回复 char *msg="i get your connext"; write(c_fd,msg,strlen(msg));return 0;}

实现服务器代码之后,我们可以通过**windows平台或者Linux平台下的telnet客户端** 来测试服务器的地址端口是否导通

也可以通过客户端代码与服务器建立连接。

客户端代码

#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>//#include <linux/in.h>//与下一行冲突#include <netinet/in.h>#include <arpa/inet.h>#include <stdlib.h>#include <string.h>int main(){//1.socket:获取套接字 int c_fd; c_fd=socket(AF_INET,SOCK_STREAM,0); if(c_fd==-1) {perror("socket");exit(-1); } struct sockaddr_in c_addr; memset(&c_addr,0,sizeof(struct sockaddr_in)); c_addr.sin_family=AF_INET; c_addr.sin_port = htons(8988); inet_aton("172.20.10.3",&c_addr.sin_addr); //2.connext:连接服务器 int cnt=connect(c_fd,(struct sockaddr *)&c_addr,sizeof(struct sockaddr));//在连接的过程会阻塞在这里 if(cnt==-1) {perror("socket");exit(-1); } //3.write:客户端发送数据 char *msg = "msg from client\n"; write(c_fd,msg,strlen(msg)); //4.read:读取数据 char readbuf[128]; int n_read=read(c_fd,readbuf,128); if(n_read == -1) {perror("read"); }else {printf("get message from sever: %d,%s\n",n_read,readbuf); } return 0;}

注1:在win10操作系统下有telnet客户端,但没有telnet服务器,需要下载,安装并打开 需要进一步解决 注2:在linux平台上,telnet出现连接超时的问题,也需要进一步解决。 注3:以上代码在连接的时候存在小bug,有待修正。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。