`
隐形的翅膀
  • 浏览: 483773 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

套接字基础

 
阅读更多
1.
int socket(int domain,int type, int protocol)
int sockfd=socket(,,,);

返回文件描述符,-1 表示错误
需要头文件: <sys/types.h> <sys/socket.h>
domain : AF_INET,PF_INET,AF_INET6, IPv4 or IPV6
type:SOCK_STREAM, SOCK_DGRAM, tcp or udp
protocol: 通常默认为0, 表示系统自动选择合适的协议类型

2. IPV4套接字地址

struct sockaddr_in{
sa_family_t sin_family;
uint16_t sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
};

struct in_addr{
uint32_t s_addr;
}

3. int connect(int sockfd,const struct sockaddr *servaddr,socklen_t addrlen)

0表示成功,-1表示失败, 非阻塞函数,立即返回

4. int listen(int sockfd,int backlog)

backlog  参数是指完成TCP三次握手后已经成功建立TCP连接的队列的长度,服务器执行ACCEPT操作从该队列中取下一个连接进行后续处理,BACKLO的默认值是128

5. int accept (int sockfd,struct sockaddr *cliaddr,socklen_t *addrlen);

TCP服务器使用ACCEPT 函数从BACKLOG队列中返回下一个成功建立的连接), 如果BACKLOG队列为空,则服务器进程将被阻塞

如果该函数调用成功,它的返回值是一个新的套接字描述符,称为连接套接字,服务器使用该套接字和亿建立的客户端进行通信,而原有的监听套接字继续接受后续新客户端发来的连接请求

6. 其它

read/write/: TCP 连接用的函数

recvfrom/sendto UDP, 数据包套接字用到的函数

7.

if (listen(sockfd,128) == -1)
....

while(1){
if((new_fd = accept()) == -1)
....

for(;;)
{
len= read()

if(len>0)
处理读到的数据
}


}

此种模式下服务器只能对所接受到的一个客户端的连接请求进行处理,不能太接受其它客户端的连接请求,只有处理完,才能处理下一个请求

7. 使用子进程来出来


if (listen(sockfd,128) == -1)
....

while(1){
if((new_fd = accept()) == -1)
....

pid=fork()
switch(pid)
case :0 子进程
read
处理读入数据



}

高级套接字

8. setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t optlen)

level: SOL_SOCKET, SOL_TCP

a SO_KEEPALIVE: 若在两小时内TCP连接双方没有发送过任何数据,自动向对方发送活动探测,并且接受方必须回应

b SO_RECVBUF SO_SNDBUF 调整发送缓存区和接受缓存区的大小

c SO_RCVLOWAT SO_SNDLOWAT 最低接收阀值和最低发送阀值

d SO_REUSEADDR : 服务器再次绑定到一个端口,无需等待。

9.

文件描述符

FD_ZERO(fd_set *fdset); 清空
FD_SET(int fd,fd_set *fdset); 添加
FD_CLR(int fd,fd_set *fdset); 删除某个
FD_ISSET(int fd,fd_set *fdset); 坚持某个是否被置位

fd_set rfds,orfds;
FD_ZERO(&orfds);
FD_SET(STDIN_FILENO,&orfds);
maxfd=STDIN_FILENO;

FD_SET(STDIN_FILENO,&orfds);
if((sockfd > maxfd)
maxfd=sockfd

rfds=orfds;

用SELECT 开始等待可读文件描述符集合可用的通知


ret = select(maxfd+1,&rfds,NULL,NULL,NULL)

if(ret == -1)
error
else
for(int i = 0; i < MAX_CONNECTION; i++)
{
if(FD_ISSET(sockfd,,&rfds)
read...
else if(FD_ISSET(STDIN_FILENO,&rfds)
write...
}

缺点
_FD_SETSIZE 最大值为1024, 若修改,需要重新编译内核,需要轮询

当使用FD_ISSET时, 需要遍历所有集合












分享到:
评论

相关推荐

    socket同步套接字服务器客户端

    socket同步套接字基础服务器、同步套接字客户端程序,即聊天程序,测试已成功!

    基于Python进行TCP套接字编程的基础知识 实验报告

    3.1 套接字基础与UDP通信 (源代码见附件) 实验原理: 基于UDP的无连接客户/服务器在Python实现中的工作流程如下: 1.首先在服务器端通过调用socket()创建套接字来启动一个服务器; 2.服务器调用bind()指定服务器的...

    多线程与异步套接字编程

    在Windows操作系统中,线程是指系统中最小的功能执行单元,其可以独立的完成某一项功能。所以在进行Windows编程中,如果用户使用多线程处理某个功能...在本章中,将向用户介绍使用多线程处理异步套接字编程的相关方法。

    第2章 Socket套接字编程

    关于socket套接字的编程视频,内容详细,非常适合新手学习,还在等什么呢,快来观看吧。

    同步套接字基础客户端服务端实例

    该程序使用Socket类的Bind 方法绑定本地主机,使用Listen方法监听端口,使用Accept 接收连接请求,用NetWorkStream类的Read方法读取数据,用Write方法发送数据,用Thread 类的Start方法实现线程同步,采用BigEndian...

    《计算机 网络》实验一套接字网络编程

    在本实验中,将学习Python中TCP连接的套接字编程的基础知识:如何创建套接字,将其绑定到特定的地址和端口,以及发送和接收HTTP数据包。你还将学习一些HTTP首部格式的基础知识。 你将开发一个处理一个HTTP请求的Web...

    Python基于UDP协议的套接字通信,网络编程必看

    用Python实现基于UDP协议的套接字,分为服务端和客户端源码,两者可以通过套接字进行收发消息。

    网络套接字编程

    网络套接字编程\计算机网络基础\套接字概述\套接字函数\MFC套接字编程

    计算机网络实验四(套接字及客户服务器应用程序基础)点对点聊天的实用程序的完整代码

    计算机网络实验四(套接字及客户服务器应用程序基础)的完整、可运行的源代码。 实现的是一个点对点聊天的实用程序,开发语言为Java。实现了登录、公聊、私聊等功能。

    计算机网络实验套接字

    套接字,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能...

    简单的套接字编程

    基于基础的网络套接字编程,简单的服务端发送倒计时间,客户端接收,与服务端同步

    基于数据报套接字的回射程序设计与实验报告加源码

    1、利用数据报套接字编写回射服务器和客户端。 2、使用类的形式封装服务器和客户端的网络功能框架,提高程序的适用性。 3、在编程框架的基础上扩展程序功能,测试网络丢包率。

    Java Socket套接字

    一篇讲Java Socket套接字的小文章,不过里面讲的还不错。对于像学习Java Socket基础的人来说可以下载看看,我也顺便挣点分。 :)

    Java Socket 套接字编程经典入门

    Socket即套接字 java.net包的客户端Socket,服务端ServerSocket; 单线程套接字客户端和服务端的处理; 服务端多线程处理客户端套接字; 带有线程池处理客户端套接字; 不会Socket,有Java基础就能完全理解Socket...

    精通Windows Sockets网络开发:基于Visual C++实现PDF和源代码

    全书内容包括准备开发环境、TCP/IP基本介绍、Windows套接字基础、协议特征、基本TCP套接字编程、基本UDP套接字编程、套接字选项、套接字阻塞模式开发、套接字非阻塞模式开发、Select模型开发、WSAAsyncSelect模型...

    UNIX 编程技术与实例分析

    第3章 套接字基础 第4章 TCP套接字 第5章 UDP套接字 第三部分 Unix网络编程实用技术 第6章 并发服务器 第7章 名字和IP地址转换 第8章 同步及进程间通信 第9章 异常处理 第10章 创建实用套接字类库 第四...

    网络通信 套接字 socket 代码

    网络通信 套接字 socket 代码 包括客户端和服务端 是socket学习的基础

    VC基于MFC的套接字客户端+服务器程序

    绝对可用,为MFC的网络套接字客户端和服务器程序,有助于初学者学习,并以此为基础开发程序~0分放送~~~

    FTP套接字编程

    在前三个实验的基础上,将其改造为一个能传输指定文件名称的点对点文件传输软件 设计并实现一个支持多个客户端的文件传输服务器 客户端等待键盘输入文件名称,然后将文件名称传输给服务器,服务器在预先设置好的...

    基于MFC的套接字(客户端+服务器).rar

    MFC套接字编程(服务端+客户端),大学作业,已测,可用。有助于初学者学习,并在此基础上进行改进。能够显示从客户端接收到的信息及服务端自己发送的消息。

Global site tag (gtag.js) - Google Analytics