socket编程:客户端与服务器间的连接以及各函数的用法
在认真的看UNP之前,一直被socket编程说的云里雾里,今天我要让大家从整天上认识socket编程,让我们知道socket编程的整个流程和各个函数的用法。这样:我们在写一些简单的socket编程时就不用被那么多函数和调用顺序所迷惑了。下面看UNP书上给的图片描述的建立连接的过程,看了之后一目了然!
1.建立连接的概括图
2.各个函数的用法:
(1).socket()
包含文件:#inlcude<sys/socket.h>
函数原型:int socket(int family, int type, int protocol);
参数说明:
a. family:一般为AF_INET(IPV4协议)
b. type : SOCK_STREAM(字节流套接字)
SOCK_DGRAM(数据报套接字)
SOCK_SEQPACKET(有序分组套接字)
SOCK_RAW(原始套接字)
c. protocol:IPPROTO_TCP(TCP传输协议)
IPPROTO_UDP(UDP传输协议)
IPPROTO_SCTP( SCTP传输协议)
返 回:若成功则为非负描述符,若出错则为-1;
功 能:指定期望的通信协议类型(使用IPV4的TCP,使用IPV6的UDP,UNIX域字节流协议)。
(2) . bind()
包含文件:#include<sys/socket>
函数原型:int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);
参数说明:
a. sockfd: 套接字描述符
b. myaddr: 指向特定于协议的地址结构指针
c. addrlen: 地址结构的长度。
返 回:若成功返回0,若出错则返回-1。
功 能:把一个本地协议赋予一个套接字。对于网际网协议,协议地址是32为的IPV4地址或128位的IPV6地址与16位的TCP或UDP端口号的组合。
(3) . listen()
包含文件:#include<sys/socket.h>
函数原型:int listen(int sockfd, int backlog);
参数说明:
a. sockfd: 套接字描述符
b. baklog: (待研究,一般给默认值)
返 回:若成功为0,若出错则为-1。
功 能:仅由TCP服务器调用,listen将一个未连接的套接字转换成一个被动套接字,指示内核应该接受指向该套接字的请求。
(4) . accept()
包含文件:#include<sys/socket.h>
函数原型:int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);
参数说明:
a. sockfd: 监听套接字描述符(由socket创建,随后用作bind和listen的第一个参数的描述符)
b. cliaddr: 指向套接字地址结构的指针
c. addrlen:指向套接字地址结构的大小
返 回:返回一个已连接套接字描述符。监听套接字描述符整个服务器期间只建立一个,而已连接套接字会有多个,对应相应的进程。
功 能:用于从已完成连接队列队头返回下一个已完成连接,如果已完成队列连接队列为空,那么进程被投入睡眠(即阻塞)
(5) . connect()
包含文件:#include<sys/socket.h>
函数原型:int connect(int sockfd, struct sockaddr *servaddr, socklen_t *addrlen);
参数说明:
a. sockfd: 监听套接字描述符
b. cliaddr: 指向
返 回:若成功为0,若出错则为-1
功 能:仅由TCP服务器调用,listen将一个未连接的套接字转换成一个被动套接字,指示内核应该接受指向该套接字的请求。
(6). close()
包含文件:#include<unistd.h>
函数原型:int close(int sockfd);
参数说明:sockfd:要关闭的套接字的描述符
返 回:若成功为0,若出错则为-1
功 能:关闭套接字,并终止TCP连接。返回调用进程
socket编程:客户端与服务器间的连接以及各函数的用法的更多相关文章
- Windows Socket 编程_单个服务器对多个客户端简单通讯
单个服务器对多个客户端程序: 一.简要说明 二.查看效果 三.编写思路 四.程序源代码 五.存在问题 一.简要说明: 程序名为:TcpSocketOneServerToMulClient 程序功能:实 ...
- 【python】网络编程-SocketServer 实现客户端与服务器间非阻塞通信
利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信.首先,先了解下SocketServer模块中可供使用的类:BaseServer:包含服务器的核心功能与混合(mix-in)类 ...
- android下socket编程问题:服务器关闭时,客户端发送请求的异常处理
我用socket分别创建了一个服务器和一个客户端. 当服务器程序运行时,客户端和服务器发送接收数据是OK的. 但是,如果服务器程序关闭以后,客户端仍然发送请求的话,会抛出一个IOException.但 ...
- TCP客户端和服务器间传输数据遇到的TypeError: a bytes-like object is required, not 'str'问题
使用python实现python核心编程3第472页和474页的TCP时间戳服务器和客户端服务器间数据传输编程时遇到TypeError: a bytes-like object is required ...
- Socket编程——客户端,服务器端的读写操作
URL网络编程,最大的特征就是一对一的响应! 1:客户端“写”,服务器端用于“读” package coreBookSocket2; import java.io.InputStreamReader; ...
- Java网络编程客户端和服务器通信
在java网络编程中,客户端和服务器的通信例子: 先来服务器监听的代码 package com.server; import java.io.IOException; import java.io.O ...
- socket编程和并发服务器
socket这个词可以表示很多概念: 在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket. 在TCP协议中,建立连接的两个进程 ...
- socket编程实现tcp服务器_C/C++
1. 需求分析 实现一个回声服务器的C/S(客户端client/服务器server)程序,功能为客户端连接到服务器后,发送一串字符串,服务器接受信息后,返回对应字符串的大写形式给客户端显示. 例如: ...
- 利用Python中SocketServer 实现客户端与服务器间非阻塞通信
利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信 版权声明 本文转自:http://blog.csdn.net/cnmilan/article/details/9664823 ...
随机推荐
- 【ES6】Set和Map中的NaN
在JavaScript中,有个有意思的的式子:NaN !== NaN.在Set中的元素的重复检查或者Map键的定位过程中,都是用的类似恒等的检查逻辑.该逻辑和恒等检查的主要区别就是:NaN等于自身.
- Python之路【第二十篇】:待更新中.....
Python之路[第二十篇]:待更新中.....
- node里如何查看浏览器信息
'use strict'; let http = require(`http`); http.createServer((req, res) => { console.log(req.heade ...
- Html5新增的语义化标签(部分)
2014年10月29日,万维网联盟宣布,经过接近8年的艰苦努力,html5的标准规范终于制定完成.这是互联网的一次重大变革,这也许是一个时代的来临! 总结一些h5新增的语义化标签,记录下来方便自己学习 ...
- C#快速排序法
最近面试的时候,被问到了快速排序法.一时之间,无法想起算法来. 重新看了书本,算法如下: 1)设置两个变量I.J,排序开始的时候:I=0,J=N-1: 2)以第一个数组元素作为关键数据,赋值给key, ...
- Struts2 中拦截器和Action的调用关系(写的很好)
http://blog.csdn.net/hackerain/article/details/6991082
- IO流基础
IO流,也称为数据流,用于处理设备之间的数据传输. JAVA对数据的操作就是通过流的方式,而流分为两种:字符流,字节流 字符流: 可以内部制定码表,处理文字很方便,字符流里的基类是Reader,Wri ...
- Asp.net 实现图片缩放 无水印(方法一)
/// <summary> /// 图片缩放 无水印 /// </summary> /// <param name="sourceFile">图 ...
- Fedora 18 安装前指南
Secure Boot 与 Win 8 随着 Win8 的发布,先前关于 Secure Boot 和 UEFI 的诸多猜测也得到了证实,Fedora 18 也将如同当初计划的那样使用 shim + ...
- JS和jQuery获取节点的兄弟,父级,子级元素
原文转自http://blog.csdn.net/duanshuyong/article/details/7562423 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的 ...