C++ socket编程基础二(三种Socket:TCP,UDP,原始Socket)

本文详细介绍了C++中TCP、UDP和原始Socket的编程基础,包括服务器端和客户端的创建、连接、通信及关闭套接字的过程。对于原始Socket,特别强调了其在Windows 2000后的增强功能,如支持IP_HDRINCL选项以构造和控制网络底层传输机制。
摘要由CSDN通过智能技术生成

一、基于TCP(面向连接)的的Socket

 

1、服务器端

 

创建套接字

SOCKET socket(  
	int af,  //参数af指定通信发生的区域:AF_UNIX、AF_INET、AF_NS等,而DOS、 WINDOWS中仅支持AF_INET,它是网际网区域。因此,地址族与协议族相同。
	int type,  //参数type 描述要建立的套接字的类型。这里分三种:TCP,UDP,RAW
	int protocol);	//参数protocol说 明该套接字使用的特定协议,如果调用者不希望特别指定使用的协议,则置为0,使用默认的连接模式。


绑定套接字到本地地址和端口上

int bind( 
	SOCKET s, 	//参数s是由socket()调用返回的并且未作连接的套接字描述符(套接字号)。
	const struct sockaddr* name, 	//参数name 是赋给套接字s的本地地址(名字),其长度可变,结构随通信域的不同而不同。
	int namelen	//namelen表明了name的长度.如果没有错误发生,bind()返回 0。否则返回SOCKET_ERROR。
);


将套接字设为监听模式,准备接受请求

int listen( 
	SOCKET s,  	//参数s标识一个本地已建立、尚未连接的套接字号,服务器愿意从它上面接收请求。
	int backlog	//backlog表示请求连接队列的最大长度,用于限制排队请求的个数,目前允许的最大值为5。如果没有错误发生,listen()返回0。否则它返回SOCKET_ERROR。
);
 


等待客户端请求,当接受连接请求后,返回一个新的对应于此次连接的套接字SOCKET accept( SOCKET s, struct sockaddr* addr,  int* addrlen);

 

利用accept函数返回的套接字(里面有客户端的IP地址和端口号)进行通信-----发送信息

int send(
  SOCKET s,	//参数s为已连接的本地套接字描述符。
  const char FAR* buf,	//buf 指向存有发送数据的缓冲区的指针,其长度由len 指定。
  int len,	//
  int flags	//flags 指定传输控制方式,如是否发送带外数据等。
);    

  

接受信息

int recv(  
	SOCKET s,  	//参数s 为已连接的套接字描述符。
	char FAR* buf,  	//buf指向接收输入数据缓冲区的指针,其长度由len 指定。
	int len,  
	int flags);		//指定传输控制方式,如是否接收带外数据等。


等待另一客户端请求

关闭套接字


2、客户端

 

创建套接字

socket

向服务器发出连接请求

int connect(  SOCKET s,  const struct sockaddr FAR* name,  int namelen);

进行通信

send 和 recv

关闭套接字


二、基于UPD(面向无连接)的socket

 

1、服务器端

 

创建套接字-----socket

绑定地址和端口------bind

数据处理------接收数据  int recvfrom(

  __in          SOCKET s,

  __out         char* buf,

  __in          int len,

  __in          int flags,

  __out         struct sockaddr* from,

  __in_out      int* fromlen

);     

发送数据 int sendto(

  __in          SOCKET s,

  __in          const char* buf,

  __in          int

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值