TCP服务器
2016-07-25 21:58
411 查看
1、用到的函数
socket函数:打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符,应用程序可以像读写文件一样用read/write在网络上收发数据,如果socket()调用出错则返回-1。
![](http://s5.51cto.com/wyfs02/M01/84/E0/wKiom1eWGGTA0edgAAAsvsXIm4I330.png-wh_500x0-wm_3-wmp_4-s_3257384616.png)
![](http://s3.51cto.com/wyfs02/M02/84/E1/wKioL1eWGNiQFuKMAACWcWwwPi0684.png-wh_500x0-wm_3-wmp_4-s_2436564892.png)
服务器程序所监听的网络地址和端口号通常是固定不变的,客户端程序得知服务器程序的地址和端口号后就可以向服务器发起连接,因此服务器需要调用bind绑定一个固定的网络地址和端口号。bind()成功返回0,失败返回-1。bind()的作用是将参数sockfd和myaddr绑定在一起,使sockfd这个用于网络通讯的文件描述符监听myaddr所描述的地址和端口号。
![](http://s2.51cto.com/wyfs02/M00/84/E0/wKiom1eWGQChO75dAAAvrym7qR4754.png-wh_500x0-wm_3-wmp_4-s_3263108104.png)
监听函数
![](http://s4.51cto.com/wyfs02/M00/84/E1/wKiom1eWGUKgSENMAAAp6sBrL4A167.png-wh_500x0-wm_3-wmp_4-s_1361372583.png)
三方握手完成后,服务器调用accept()接受连接,如果服务器调用accept()时还没有客户端的连接请求,就阻塞等待直到有客户端连接上来。
![](http://s1.51cto.com/wyfs02/M01/84/E1/wKiom1eWGZHD75JiAABWPKRq1Ak186.png-wh_500x0-wm_3-wmp_4-s_3044354106.png)
2、server.c
![](http://s4.51cto.com/wyfs02/M00/84/E1/wKioL1eWGf7D2pQaAABxoTNu_Eg733.png-wh_500x0-wm_3-wmp_4-s_3762882877.png)
![](http://s2.51cto.com/wyfs02/M02/84/E1/wKioL1eWGf6j07syAABmk_sPp2E754.png-wh_500x0-wm_3-wmp_4-s_3559367846.png)
![](http://s3.51cto.com/wyfs02/M01/84/E1/wKiom1eWGkbx3vc6AADTTT81Gy8905.png-wh_500x0-wm_3-wmp_4-s_2194388962.png)
3、client.c
![](http://s2.51cto.com/wyfs02/M01/84/E1/wKiom1eWGnGRP84ZAACb1g0aa6g315.png-wh_500x0-wm_3-wmp_4-s_1880748352.png)
![](http://s3.51cto.com/wyfs02/M01/84/E1/wKioL1eWGnXBz89jAACnJIXppA8275.png-wh_500x0-wm_3-wmp_4-s_274556996.png)
4、运行结果
![](http://s4.51cto.com/wyfs02/M00/84/E1/wKiom1eWGtTCCjybAACQydQKqh8478.png-wh_500x0-wm_3-wmp_4-s_3681754530.png)
本文出自 “LOVEMERIGHT” 博客,请务必保留此出处http://lovemeright.blog.51cto.com/10808587/1829869
socket函数:打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符,应用程序可以像读写文件一样用read/write在网络上收发数据,如果socket()调用出错则返回-1。
![](http://s5.51cto.com/wyfs02/M01/84/E0/wKiom1eWGGTA0edgAAAsvsXIm4I330.png-wh_500x0-wm_3-wmp_4-s_3257384616.png)
![](http://s3.51cto.com/wyfs02/M02/84/E1/wKioL1eWGNiQFuKMAACWcWwwPi0684.png-wh_500x0-wm_3-wmp_4-s_2436564892.png)
服务器程序所监听的网络地址和端口号通常是固定不变的,客户端程序得知服务器程序的地址和端口号后就可以向服务器发起连接,因此服务器需要调用bind绑定一个固定的网络地址和端口号。bind()成功返回0,失败返回-1。bind()的作用是将参数sockfd和myaddr绑定在一起,使sockfd这个用于网络通讯的文件描述符监听myaddr所描述的地址和端口号。
![](http://s2.51cto.com/wyfs02/M00/84/E0/wKiom1eWGQChO75dAAAvrym7qR4754.png-wh_500x0-wm_3-wmp_4-s_3263108104.png)
监听函数
![](http://s4.51cto.com/wyfs02/M00/84/E1/wKiom1eWGUKgSENMAAAp6sBrL4A167.png-wh_500x0-wm_3-wmp_4-s_1361372583.png)
三方握手完成后,服务器调用accept()接受连接,如果服务器调用accept()时还没有客户端的连接请求,就阻塞等待直到有客户端连接上来。
![](http://s1.51cto.com/wyfs02/M01/84/E1/wKiom1eWGZHD75JiAABWPKRq1Ak186.png-wh_500x0-wm_3-wmp_4-s_3044354106.png)
2、server.c
![](http://s4.51cto.com/wyfs02/M00/84/E1/wKioL1eWGf7D2pQaAABxoTNu_Eg733.png-wh_500x0-wm_3-wmp_4-s_3762882877.png)
![](http://s2.51cto.com/wyfs02/M02/84/E1/wKioL1eWGf6j07syAABmk_sPp2E754.png-wh_500x0-wm_3-wmp_4-s_3559367846.png)
![](http://s3.51cto.com/wyfs02/M01/84/E1/wKiom1eWGkbx3vc6AADTTT81Gy8905.png-wh_500x0-wm_3-wmp_4-s_2194388962.png)
3、client.c
![](http://s2.51cto.com/wyfs02/M01/84/E1/wKiom1eWGnGRP84ZAACb1g0aa6g315.png-wh_500x0-wm_3-wmp_4-s_1880748352.png)
![](http://s3.51cto.com/wyfs02/M01/84/E1/wKioL1eWGnXBz89jAACnJIXppA8275.png-wh_500x0-wm_3-wmp_4-s_274556996.png)
4、运行结果
![](http://s4.51cto.com/wyfs02/M00/84/E1/wKiom1eWGtTCCjybAACQydQKqh8478.png-wh_500x0-wm_3-wmp_4-s_3681754530.png)
本文出自 “LOVEMERIGHT” 博客,请务必保留此出处http://lovemeright.blog.51cto.com/10808587/1829869
相关文章推荐
- 网络基础知识点总结1
- win 10 远程连接出现 "由于安全设置错误, 客户端无法连接到远程计算机. 确定你已登录到网络后.” 错误
- 手动编译安装httpd2.4.20 pcre-config错误解决
- 网络占卜大兴!能成下一个创业风口吗?
- 深度学习概述:从感知机到深度网络
- 网络编程之Socket ---TCP编程
- <JAVA学习笔记9>——网络之Socket的简单介绍
- muduo网络库学习笔记(0):面向对象编程风格和基于对象编程风格的比较
- 卷积神经网络问题总结
- C# ping网络IP 实现网络状态检测
- 利用卷积神经网络(CNN)提取图片特征
- MultiPath TCP - Linux Kernel implementation - Google Nexus 5 (Android 4.4)
- 关于httpservletrequest的获取真实的ip
- ICCV 2015 揭开152层神经网络的面纱(Deep Residual Learning )
- 小白学Tensorflow之多层神经网络
- 卷积神经网络CNN经典模型整理(AlexNet,GoogleNet,VGG,Deep Residual Learning)
- In Korean, Multipath TCP is pronounced GIGA Path
- 在 Web 请求中使用 XMLHttpRequest
- MPTCP port for Android
- OkHttpUtils - 封装了okhttp的网络框架