本文讲述socket客户端和服务端的简单实现。
客户端
- 用到的头文件及用法
<code>#include /*获取设置socket,bind*/ #include /*基本数据类型,如time_t*/ #include /*用于socketaddr_in结构体,htons系统调用*/ #include /*对read write提供支持*/ #include /*提供 inet_addr*/ #include #include /<code>
- 程序原理
- 先声明一个存放端口和协议类型的结构体对象。sockret=socket(AF_INET,SOCK_STREAM,0);
- 设置好连接的方式
<code>sock.sin_family = AF_INET; sock.sin_addr.s_addr = inet_addr("127.0.0.1"); sock.sin_port = htons(4000);//40975 len=sizeof(sock); result=connect(sockret,(struct sockaddr*)&sock,len); /<code>
- 向服务端收发数据
<code>write(sockret,&ch,1); read(sockret,&ch,1); /<code>
3.源代码如下
<code>#include /*获取设置socket,bind*/ #include /*基本数据类型,如time_t*/ #include /*用于socketaddr_in结构体,htons系统调用*/ #include /*对read write提供支持*/ #include /*提供 inet_addr*/ #include #include using namespace std; int main() { int sockret; int len; struct sockaddr_in sock; int result; char ch='J'; /*AF_INET是ipv4,sock流是tcp协议*/ sockret=socket(AF_INET,SOCK_STREAM,0); /*连接方式,IP ,端口,端口用大小端转换*/ sock.sin_family = AF_INET; sock.sin_addr.s_addr = inet_addr("127.0.0.1"); sock.sin_port = htons(4000);//40975 len=sizeof(sock); result=connect(sockret,(struct sockaddr*)&sock,len); if(result!=0) { perror("clinent error"); } write(sockret,&ch,1); read(sockret,&ch,1); cout服务端
主要负责监听端口,并且响应连接请求。
<code>#include #include #include #include #include #include #include #include #define MAXLINE 4096 int main(){ int listenfd, connfd; struct sockaddr_in servaddr; char buff[4096]; int n; if( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){ printf("create socket error: %s(errno: %d)\n",strerror(errno),errno); return 0; } memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(4000); if( bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){ printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno); return 0; } if( listen(listenfd, 10) == -1){ printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno); return 0; } printf("======waiting for client's request======\n"); while(1){ if( (connfd = accept(listenfd, (struct sockaddr*)NULL, NULL)) == -1){ printf("accept socket error: %s(errno: %d)",strerror(errno),errno); continue; } n = recv(connfd, buff, MAXLINE, 0); buff[n] = '\0'; printf("recv msg from client: %s\n", buff); close(connfd); } close(listenfd); return 0; } /<code>总结
有后续的内容,以后再补充吧
分享到: