socket网络编程,基础函数的使用和需要注意的地方

先写一个不管是网络编程还是其他编程都很有用的小技巧:

包裹函数:

int Socket(int domain,int type,int protool){
   int sockfd;
   if((sockfd=socket(domain,type,protool))<0){
      perror("socket error!");
      exit(1);
   }
}

对于包裹函数,最最主要的一点就是等于号的优先级是最低的,所以,要在比较的时候加括号,不然就会出现socket operation on non-socket的报错。这点我深有体会。

好了,现在开始写基础的socket编程;

无论是客户端还是服务器端,首先都要创建一个socket套接字,

socket函数的参数如下:

int socket(int domain,int type,int protool);

第一个参数的含义是表示用的什么协议,基本用的比较多的就是AF_INET和AF_INET6,一个是IPV4,一个是IPV6,还有AF_LOCAL,unix域套接字,AF_ROUTE,路由套接字,AF_KEY,密钥套接字。

第二个参数的含有是表示用的什么类型的套接字,SOCK_STREAM,字节流套接字,SOCK_DGRAM,数据报套接字,SOCK_RAW,原始套接字。SOCK_SEQPACKET有序分组套接字。

一般除非特殊场合,只要前面的设定已经设好了,这个参数基本上就是设0;

然后在服务器端,接下来的操作就是要bind套接字。

bind套接字之前要先设置服务器的sockaddr结构:

memset(&servaddr,0,sizeof(servaddr));
servaddr.sin_family=AFNET;
servaddr.sin_addr.s_addr=htonl(INADDRINY);
servaddr.sin_port=htons(PORT);

 先清空地址,然后设置第一个是设协议,然后设IP地址,然后设端口。

int bind(int sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr));

 

if((bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0){
   perror("bind error!");
   exit(1);
}

下面则是bind函数的错误包裹函数。

第一个参数就是套接字,第二个参数是强制转换成sockaddr的sockaddr_in结构的servaddr,第三个参数是

bind完了就是监听,listen紧随其后:

int listen(int sockfd,int bakclog);

第一个参数是套接字,第二个是套接字排队的最大连接数。

然后进入循环等待,accept函数,只要客户端一connect就绪,accept就会接收,连接建立,不然就会一直阻塞在accept函数中,

下面是accept函数:

socklen_t clilen;
clilen=sizeof(cliaddr);
accept(sockfd,(struct sockaddr*)&cliaddr,&clilen);

 客户端的关键就是创建socket套接字,不需要绑定,不需要监听,不过要设置服务器端的地址servaddr。然后连接到服务器端:

connect(int sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr);

 现在就是连接已经建立好了,当然在accept和connect中还有很多可以讨论,比如说多个客户端,一个服务器,如何accept,如何在listen队列中找出已经就绪的客户端。

然后还有在服务器与客户端之间的发送和接收数据的函数,我放下一篇博客写。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值