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 ...
随机推荐
- CSS样式权值
内联样式表(InLine style)>内部样式表(Internal style sheet)>外部样式表(External style sheet) 例外:但如果外部样式表放在内部样式表 ...
- sql数值显示成千分位分隔符的形式
), )--带小数点 ), ),'.00','')--不带小数点
- SGU 226.Colored graph(最短路)
时间限制:0.25s 空间限制:4M 题意: 给出一个n个节点,m条边的图,每条边都有标记了编号为1,2,3三种颜色之一,现在求从1号节点到n号节点的一条最短路径的长度,要求该路径中相邻的边没有相同的 ...
- saiku
1.saiku下载http://community.meteorite.bi/可以下载各个版本的源代码 2.下载到 saiku-latest.zip 3.解压运行比较简单 解压出来的目录: ...
- C# ToString常用技巧总结
ToString是在开发中最常用的操作,其作用是将其它类型以字符串类型表示.例如: int i=2;i.ToString() //”2″Object o = new Object();o.ToStri ...
- js 中的流程控制-条件语句
条件语句: if(exp)执行一句代码 <script> var x = 1 ; if(x == 1 ) //当if判断语句结果是true 或者 false 当判断结果等于true的时候, ...
- GET和POST详解
GET和POST 表单提交方式 http的get提交方法把表单数据编码到url中,可以在浏览器地址栏中看到, post提交把表单数据编码到http请求包的正文部分,在url中啊可能不到数据
- php里 \r\n换行问题
<?php echo "hello"; echo "\r\n"; echo "world"; ?> 在浏览器输出的是hello ...
- coreseek(sphinx)错误:WARNING: attribute 'id' not found - IGNORING
coreseek(sphinx)错误:WARNING: attribute 'id' not found - IGNORING原因及解决方法 coreseek(sphinx)建立索引时提示错误: WA ...
- yum版本新增包的一般步骤
在Jekins的自动构建环境中,有时会有在构建出的ISO中添加新应用app需求,对于采用rpm包源代码管理方式的构建环境来说,基本步骤如下: 1.下载app的src.rpm包 2.解压src.rpm包 ...