Socket编程
来源:互联网 发布:木村拓哉女儿 知乎 编辑:程序博客网 时间:2024/05/22 21:14
- domain : 协议域/协议族(family)
- type:指定socket类型
- protocol :指定协议,一般默认为0,默认使用与type对应的协议
- sockfd :要绑定的socket
- addr :地址结构体。在IPV4中它的类型是:sockaddr_in ,包含协议族(指定地址类型)、端口号、IP地址。
- addrlen :对应的IP地址的长度。
- 服务器bind()的addr,要bind服务器的IP地址,一般使用127.0.0.1可以,但是如果服务器有多块网卡(多个IP),最好还是使用seraddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//INADDR_ANY指任意IP
listen()、connect()函数
int listen(int sockfd, int backlog);int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
- 服务器端在调用了socket()和bind()函数之后,调用listen()函数来监听socket。然后客户端调用connect()函数的时候,服务器端就能收到连接请求(服务器端调用accept()函数处理请求)。
- listen()函数的第一个参数即为要监听的socket描述字,第二个参数为相应socket可以排队的最大连接个数。socket()函数创建的socket默认是一个主动类型的,listen函数将socket变为被动类型的,等待客户的连接请求。
- connect()函数的第一个参数即为客户端的socket描述字,第二参数为服务器的socket地址,第三个参数为socket地址的长度。
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
- 第一个参数是服务器的套接字地址,第二个参数返回客户端的协议地址,第三个是客户端协议地址的长度。
- accept()函数返回的是一个全新的socket,代表与返回客户端的TCP连接。
- 注意:accept的第一个参数为服务器的socket描述字,是服务器开始调用socket()函数生成的,称为监听socket描述字;而accept函数返回的是已连接的socket描述字。一个服务器通常通常仅仅只创建一个监听socket描述字,它在该服务器的生命周期内一直存在。内核为每个由服务器进程接受的客户连接创建了一个已连接socket描述字,当服务器完成了对某个客户的服务,相应的已连接socket描述字就被关闭。
- 常用的操作函数
- read()/write():参考 http://blog.csdn.net/linux_wgl/article/details/7856090
- recv()/send():参考 http://blog.csdn.net/xiaofei0859/article/details/6037814
- readv()/writev():以向量vector的形式传递数据
- recvmsg()/sendmsg():unix中用这个比较多,参考http://blog.csdn.net/sunnyboychina/article/details/1897446
- recvfrom()/sendto():UPD用,TCP不用这个。
- 原型可以查,推荐recvmsg()和sendmsg()
- 原型: int close(int fd); fd为要关闭的套接字。
- close一个TCP scoket的缺省行为是把该socket标记为关闭,然后立即返回调用进程,然后该套接字就不能再被进程调用了,也就是说不能在作为write或者read函数的第一个参数。
- close操作只是使相应的socket描述字的引用计数-1,只有当引用计数为0时,才会触发TCP客户端向服务器发送中止连接请求。
- 声明:本文摘录自Linux Socket编程(不限Linux),感谢原作者。
- 另可参考 基于TCP的Socket 编程
0 0
- socket编程--socket基本概念
- socket编程--socket基本概念
- socket编程
- socket编程
- Socket 编程
- socket编程
- Socket编程
- Socket编程
- Socket编程
- Socket编程
- SOCKET编程
- socket编程
- Socket编程
- socket编程
- Socket 编程
- Socket 编程
- socket 编程
- socket编程
- 求质数
- 二分查找
- 冒泡排序
- 归并排序
- OSG+MFC对话框程序
- Socket编程
- 为什么我不倾向于录用培训机构的学生
- MFC打开文件对话框
- CString和string的互相转换
- JSP页面中作用域及request的使用
- C++,C#,JAVA之间webservice互操作问题探讨
- C++重载,覆盖, 隐藏三者的主要区别
- C语言指针
- Qt使用教程之指定编辑器设置