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 ...
随机推荐
- [转] nginx 开启gzip压缩--字符串压缩比率很牛叉
http://www.cnblogs.com/dasn/articles/3716055.html 刚刚给博客加了一个500px相册插件,lightbox引入了很多js文件和css文件,页面一下子看起 ...
- 【Android】碎片Fragment
1.碎片可以让界面在平板上更好地展示. 2.碎片是一种可以嵌入到活动中的UI片段,它能让程序更加合理和充分地利用一个大屏幕的空间.有自己的生命周期,能包含布局. 3.新建碎片类继承Fragment,可 ...
- javascript新的原生态API
以下是最新的w3c标准的javascript,目前支持运行在firefox, chrome,IE9以上版本的浏览器 参考资料:https://developer.mozilla.org/ru/docs ...
- java返回参数中几种常见的方法
1.有参数有返回值 public class text_1 { 1)创建add方法 public int add(int i, int j) { int res = i + j; ...
- mysql隐藏文件一定要删除彻底
之前部署自己的服务器机器的时候 机器的mysql密码是不知道的.彻底删除了软件之后还是解决不了问题,而且我把MYSQL在C盘的隐藏文件也给删除了.但是还是不行 最后我偶然发现一个方法去找隐藏问题.我之 ...
- eclipse(myEclipse) 配置maven项目
工作中在myeclipse中导入maven工程后,在pom.xml文件目录执行了mvn eclipse:eclipse 后,发现项目中缺少"Maven Dependencies"目 ...
- runnable和thread的区别
一是写一个类继承自Thread类,然后重写里面的run方法,用start方法启动线程二是写一个类实现Runnable接口,实现里面的run方法,用new Thread(Runnable target) ...
- hdoj 2057
代码: #include <stdio.h>#include<string.h>int main(){ __int64 a,b,c; while(scanf("%I6 ...
- 插入排序(C++)
插入排序(C++) 插入排序: 写这篇博文是为了增加对数据结构和算法的理解,同事增加编程的基本功. 当要对如下数据进行排序: 2,8,5,4,6,7,1 2,8,5,4,6,7,1 采用插入排序 ...
- nginx插件ngx_lua
ngx_lua是淘宝的维护的产品,真心不错.配置文件包含可以做很多事情的lua脚本. 公司有个产品对注册的广告盒子进行反向代理,这样可以在盒子上做很多事情:和服务器通信,远程控制盒子等等.nginx反 ...