[置顶] c在Windows下的socket编程

  c语言虽说是跨平台的,可以一次编写,处处编译,处处运行。但是在socket方面显然不是,这里有很多原因。习惯了Linux c socket编程,在Windows下c的socket编程又不太一样,我们还得重新编写相关代码,不过道理都是相通的。

首先包就不一样:

#include   <winsock2.h> 

#pragma   comment(lib,   "wsock32.lib ") 


然后介绍几个和Linux下的API相似的函数: 
1、创建套接字——socket() 
功能:使用前创建一个新的套接字 
格式:SOCKET   PASCAL   FAR   socket(int   af,int   type,int   procotol); 
参数:af:   通信发生的区域 
type:   要建立的套接字类型 
procotol:   使用的特定协议 

2、指定本地地址——bind() 
功能:将套接字地址与所创建的套接字号联系起来。 
格式:int   PASCAL   FAR   bind(SOCKET   s,const   struct   sockaddr   FAR   *   name,int   namelen); 
参数:s:   是由socket()调用返回的并且未作连接的套接字描述符(套接字号)。 
其它:没有错误,bind()返回0,否则SOCKET_ERROR 
地址结构说明: 
struct   sockaddr_in 

short   sin_family;//AF_INET 
u_short   sin_port;//16位端口号,网络字节顺序 
struct   in_addr   sin_addr;//32位IP地址,网络字节顺序 
char   sin_zero[8];//保留 


3、建立套接字连接——connect()和accept() 
功能:共同完成连接工作 
格式:int   PASCAL   FAR   connect(SOCKET   s,const   struct   sockaddr   FAR   *   name,int   namelen); 
SOCKET   PASCAL   FAR   accept(SOCKET   s,struct   sockaddr   FAR   *   name,int   FAR   *   addrlen);
参数:同上 

4、监听连接——listen() 
功能:用于面向连接服务器,表明它愿意接收连接。 
格式:int   PASCAL   FAR   listen(SOCKET   s,   int   backlog); 

5、数据传输——send()与recv() 
功能:数据的发送与接收 
格式:int   PASCAL   FAR   send(SOCKET   s,const   char   FAR   *   buf,int   len,int   flags); 
int   PASCAL   FAR   recv(SOCKET   s,const   char   FAR   *   buf,int   len,int   flags); 

参数:buf:指向存有传输数据的缓冲区的指针。   


6、多路复用——select() 

功能:用来检测一个或多个套接字状态。 
格式:int   PASCAL   FAR   select(int   nfds,fd_set   FAR   *   readfds,fd_set   FAR   *   writefds,  
fd_set   FAR   *   exceptfds,const   struct   timeval   FAR   *   timeout); 
参数:readfds:指向要做读检测的指针 
writefds:指向要做写检测的指针 
exceptfds:指向要检测是否出错的指针 
timeout:最大等待时间 

7、关闭套接字——closesocket() 
功能:关闭套接字s 

格式:BOOL   PASCAL   FAR   closesocket(SOCKET   s); 


  顺便加一句,vc++6.0格式化代码,select   all   ->   alt-F8就可以格式化代码,这个和eclipse的source->format一样好用。


猜你喜欢

转载自aijuans2.iteye.com/blog/1624551