socket 网络 编程
网络编程场景
自己是客户端站在5栋楼前,自己要找到5栋楼中的一座并进入某一间房间,这时第二座楼上有人在用汉语(tcp/udp)说话,我的ip地址(楼号)是…,我的端口号(房间号)是…,就是先告诉你你的ip地址和端口号,确定你的服务器在哪里,然后回房间监听(等待大家的来访,来了敲门)
Socket服务器和客户端的开发步骤
服务器开发
第一步
socket()获得一个套接字,返回套接字的描述符,后面都是基于这个描述符向外面进行网络访问,这个作用有点像open()
第二步
bind()为套接字添加信息,将ip地址和端口号绑定到套接字。
第三步
listen()监听网络连接
第四步
accept()监听到有客户端接入的时候,接受一个连接。
第五步
数据交互(read从网络通道上读数据,write向网络通道发数据)
第六步
关闭套接字,断开连接。
客户端开发
socket()给客户端一个通道,知道IP地址和端口号调用connect()连接,然后客户端write服务端read,服务端write客户端read。
linux提供的API简析
1、创建套接字时指定用哪种协议进行连接
2、地址准备好
地址转换API
4、监听
4、连接
数据收发
数据的收发第二套API
客户端connect函数
字节序转换API
查找结构体方法
-nir中 n表示显示行号,i表示不区分大小写,r表示逐行扫描
socket服务端代码演示
#include<stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
//#include<linux/in.h>
#include <arpa/inet.h>
#include<stdlib.h>
#include<netinet/in.h>int main()
{int s_fd;int n_read;char readbuf[128];char*msg="I have get your messange";//1.sockets_fd=socket(AF_INET,SOCK_STREAM,0);//AF_INET表示IPV4因特网域,SOCK_STREAM表示TCP协议if(s_fd==-1){perror("socket");//打印错误exit(-1);}struct sockaddr_in s_addr;struct sockaddr_in c_addr;memset(&s_addr,0,sizeof(struct sockaddr_in));memset(&c_addr,0,sizeof(struct sockaddr_in));s_addr.sin_family=AF_INET;//IPV4因特网域s_addr.sin_port=htons(8988);//htons将字节序转换为网络字节序inet_aton("192.168.183.128",&s_addr.sin_addr);//sin_addr是ip地址//2.bindbind(s_fd,(struct sockaddr *)&s_addr,sizeof(struct sockaddr_in));//3.listenlisten(s_fd,10);int clen=sizeof(struct sockaddr_in);//4.acceptint c_fd=accept(s_fd,(struct sockaddr *)&c_addr,&clen);//这里的c_fd就是接下来的操作对象,s_fd继续等待其他客户端的接入,accept的第二个参数是接入服务器者的信息if(c_fd==-1){perror("accept");}printf("get connect :%s\n",inet_ntoa(c_addr.sin_addr));//打印接入客户端的IP地址//5.readn_read=read(c_fd,readbuf,128);if(n_read ==-1){perror("read");}else{printf("get message :%d,%s\n",n_read,readbuf);}//6.writewrite(c_fd,msg,strlen(msg));return 0;
}
socket客户端代码演示
#include<stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
//#include<linux/in.h>
#include <arpa/inet.h>
#include<stdlib.h>
#include<netinet/in.h>int main()
{int c_fd;int n_read;char* readbuf;readbuf=(char *)malloc(128);char*msg="message from client";//1.socketc_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("192.168.183.128",&c_addr.sin_addr);//2.connectif(connect(c_fd,(struct sockaddr*)&c_addr,sizeof(struct sockaddr_in))==-1){perror("connect");exit(-1);}//3.sendwrite(c_fd,msg,strlen(msg));//4.readn_read=read(c_fd,readbuf,128);if(n_read ==-1){perror("read");}else{printf("get message from server:%d,%s\n",n_read,readbuf);}return 0;
}
socket 网络 编程相关推荐
- Linux C++/Java/Web/OC Socket网络编程
一,Linux C++ Socket网络编程 1.什么是TCP/IP.UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制 ...
- python运维开发之socket网络编程01
python运维开发之socket网络编程01说明:本文来自来自北京老男孩linux运维实战培训中心-运维开发课程免费视频内容,本文内容为系列内容,更多分享信息见:http://oldboy.blog ...
- Socket网络编程(2)--服务端实现
中秋了,首先祝大家中秋快乐,闲着无事在家整一个socket的聊天程序,有点仿QQ界面,就是瞎折腾,不知道最后是不是能将所有功能实现. 如果你对socket不了解,请看这篇文章:http://www.c ...
- Linux Kernel TCP/IP Stack — Socket Layer — TCP/UDP Socket 网络编程
目录 文章目录 目录 TCP/UDP Socket 逻辑架构 创建 Socket 绑定 Socket 请求建立 Socket 连接 监听 Socket 接受请求 关闭连接 数据的发送和接收 send ...
- Socket网络编程笔记
网络.计算机网络的构成是什么? 网络: 在计算机领域中,网络是信息传输.接收.共享的虚拟平台,通过它可以把各个点.面(组织之间).体(例如公共app)的信息联系到一起,从而实现这些资源的共享. 局域网 ...
- 【Socket网络编程】14. perror()、errno 的使用
经常会在socket网络编程时看到errno和perror(),他们是什么呢? 函数定义: void perror(const char *s); perror ("open_port&qu ...
- socket网络编程——套接字地址结构
声明:此博客是本人根据老师课件总结的,如有抄袭行为,本人会即刻删除. 1.主机字节序列和网络字节序列 主机字节序列分为大端字节序和小端字节序,不同的主机采用的字节序列可能不同.大端字节序是指一个整数的 ...
- 【网络编程】之四、socket网络编程例解
前面说了那么多,现在我们给出4个代码+详解,基于win32平台的socket编程.使用TCP 和 UDP 两种协议. OK,先来看一下TCP服务器和客户端: [cpp] view plaincopy ...
- MFC socket网络编程(流程示例)
MFC socket网络编程(流程示例) 1.TCP流式套接字的编程步骤 在使用之前须链接库函数:工程->设置->Link->输入ws2_32.lib,OK! 服务器端程序: 1.加 ...
- Socket网络编程--小小网盘程序(5)
http://www.cnblogs.com/wunaozai/p/3893469.html 各位好呀!这一小节应该就是这个小小网盘程序的最后一小节了,这一节将实现最后的三个功能,即列出用户在服务器中 ...
最新文章
- ES6基础之Array.fill函数
- 三维感知,这些干货足够了!(自动驾驶/三维重建/SLAM/点云/标定/深度估计/3D检测)...
- 逻辑回归原理(python代码实现)
- r语言的MASS包干什么的_怎么记住r语言这么多包?
- hdu 2602 Bone Collector(01背包)
- 金蝶系统服务器要求,金蝶服务器安装及其相关要求.doc
- 你的气质里藏着 英文_寓意满满的小众英文名,高格调、高颜值,挑一个喜欢的吧...
- 2020年Q3笔记本电脑出货量:惠普反超联想居首位 苹果第四
- docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群
- c语言编程汉诺塔问题,C语言解决汉诺塔问题
- 【Python入门练手小项目】画一个蓝胖子❤️
- 把EditPlus添加到右键快捷菜单
- 在iOS7中修改键盘Return键的类型
- 英文论文如何看?转自知乎
- 大数据架构Spark 进阶
- 友华改设备标识命令_电信路由器密码怎么修改,路由器牌子是友华通信
- 石油石化生产企业该如何防止电网晃电发生和发生晃电时保证敏感负荷的设备正常运行
- arduino入门教程书籍推荐,arduino从入门到精通
- 错误: 对象不支持“attachEvent”属性或方法
- Vue CSS 穿透 scoped (>>> || /deep/ )
热门文章
- 【数据库学习笔记】——创建数据库文件
- 120xa正反转参数_你知道变频器的“正反转死区时间”吗?它的“停机方式”有几种?...
- linux 使用timedatectl 修改时区和时间
- Shiro安全框架入门篇
- 2017-05-12-Linux文件操作
- [SPOJ DQUERY] D-query(树状数组,离线)
- 设计模式_01_单一原则
- abap 中modify 的使用
- Java自定义JSlider UI
- java 常量池 和 堆 的关系_Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)...