读书人

Linux C编程-网络编程2-面向连接的网络

发布时间: 2013-03-10 09:38:39 作者: rapoo

Linux C编程--网络编程2--面向连接的网络编程

由于之前已经写过一篇介绍Socket通信的文章,故这篇文章是在那一篇的基础上继续补充完善,另一篇的链接如下:

http://blog.csdn.net/dlutbrucezhang/article/details/8577810

其中介绍各个函数,接下来介绍其他的一些常用系统函数。


首先给出一个实例说明常用函数的用法。

编写一个客户机--服务器程序,其中客户机使用流套接字向服务器请求日期和时间,服务器在收到请求之后,回答请求并显示客户的地址。


服务器程序如下:

#include <stdio.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#defineMAXBUFFSIZE256#definePORT 6666#define HOST_ADDR "127.0.0.1"int main(int argc, char *argv[]){int sockfd,n;char recvbuff[MAXBUFFSIZE];struct sockaddr_inservaddr;sockfd=socket(AF_INET,SOCK_STREAM,0);if(sockfd<0){printf("Socket created failed.\n");return -1;}servaddr.sin_family=AF_INET;servaddr.sin_port=htons(6666);servaddr.sin_addr.s_addr=htonl(INADDR_ANY);printf("connecting...\n");if(connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr))<0){printf("Connect server failed.\n");return -1;}while((n=read(sockfd,recvbuff,MAXBUFFSIZE))>0){recvbuff[n]=0;fputs(recvbuff,stdout);}if(n<0){printf("Read failed!\n");return -2;}return 0;}

下面重点介绍其他一些套接字操作函数:

getsockname和getpeername

#include <sys/socket.h>
int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen);
int getpeername(int sockfd, struct sockaddr *peeraddr, socklen_t *addrlen);
返回:0—OK,-1—出错。

getsockname函数返回与套接口关联的本地协议地址。

getpeername函数返回与套接口关联的远程协议地址。


使用场合:

读书人网 >编程

热点推荐