套接字和客户端服务器模式(1)

上传人:206****923 文档编号:91665163 上传时间:2019-06-30 格式:DOCX 页数:10 大小:12.82KB
返回 下载 相关 举报
套接字和客户端服务器模式(1)_第1页
第1页 / 共10页
套接字和客户端服务器模式(1)_第2页
第2页 / 共10页
套接字和客户端服务器模式(1)_第3页
第3页 / 共10页
套接字和客户端服务器模式(1)_第4页
第4页 / 共10页
套接字和客户端服务器模式(1)_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《套接字和客户端服务器模式(1)》由会员分享,可在线阅读,更多相关《套接字和客户端服务器模式(1)(10页珍藏版)》请在金锄头文库上搜索。

1、套接字和客户端服务器模式 目录:1.什么是套接字?2.如何创建套接字?3.如何创建简单的服务器?4.如何创建简单的客户端?一 什么是套接字很多教材中会讲解什么是套接字,这里我讲一下我的理解。我们想和另一个大楼的某个房间的美眉建立联系,可选的方案是知道对方的电话直接呼叫,另外就是利用对方的地址(大楼和房间)写信给她,这个就是基本的通信。其实这个过程和利用套接字建立联系是有很大相似的。我们知道IP可以标记一台主机,而端口则是标记具体的服务,套接字是主机对面服务接口的抽象,它屏蔽了内部的具体实现,我们可以利用它与另一个进程(不管是否在一台主机上)建立通信。二 如何建立套接字不管是linux还是win

2、dows都提供了一系列的socket函数,而套接字可以socket创建,函数的原型为int socket(int domain,int type,int protocal),domain一般会取AF_INET,这表示采用因特网域,type类型一般会取SOCK_STREAM和SOCK_DGRAM两种类型,分别对应着字节流和数据报两种类型。三 如何创建简单的服务端服务端犹如那个美眉,我们要想联系知道她的地址。一般开放的美眉会向开开放自己的地址,等着帅哥过来主动联系,美眉为了隐藏自己会用自己的小号与帅哥联系,而且可能还要保存着帅哥的信息以便以后可以继续联系。服务端会按照以下的方式进行创建:(1) 创

3、建套接字 socket(2) 这个套接字命名,即绑定地址:sockaddr_in bind(3) 建立等待客户端连接的队列,设置套接字为监听状态 listen(4) 接受客户端的连接 accept(5) 关闭连接 close 备注:accept会返回一个套接字,服务端会利用这个套接字与客户端进行联系。等走完以上几个步骤后,一个简单的服务端程序就可以运行了啊,我们帅哥(客户端)就可以主动的联系我们的美眉了啊。四 如何创建简单的客户端客户端就是那个要主动联系美眉的角色,没有什么内涵,也不需要添加太多的功能,客户端可以按照一下流程就可以搞定:(1) 创建套接字 socket(2) 连接服务端 con

4、nect(3) 关闭连接 close通过以上流程,客户端就可以搞定了啊,客户端和服务端两者就可以畅快的通信了啊。服务端代码:1 #include <iostream>2 #include <sys/socket.h>3 #include <sys/types.h>4 #include <arpa/inet.h>5 using namespace std;6 7 int main()8 9 /create socket handle10 int listen_sock = socket(AF_INET,SOCK_STREAM,0);11 if(li

5、sten_sock < 0)12 13 cout << "create socket error" << endl;14 return -1;15 16 17 /bind socket18 struct sockaddr_in server_addr;19 server_addr.si n_family = AF_INET;20 server_addr.sin_port = htons(5555);21 server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");22 if(bi

6、nd(listen_sock,(struct sockaddr*)&server_addr,sizeof(server_addr) < 0)23 24 cout << "bind socket error" << endl;25 close(listen_sock);26 return -1;27 28 29 listen(listen_sock,5);30 /wait for connection31 while(true)32 33 int sock = accept(listen_sock,NULL,NULL);34 send(s

7、ock,"hello world",strlen("hello world")+1,0);35 close(sock);36 37 38 close(listen_sock);39 return 0;40 41客户端代码:1 #include <iostream>2 #include <sys/socket.h>3 #include <sys/types.h>4 #include <arpa/inet.h>5 using namespace std;6 7 const int BUFSIZE = 128;

8、8 int main()9 10 /create socket11 int client_socket = socket(AF_INET,SOCK_STREAM,0);12 if(client_socket < 0)13 14 cout << "create socket error" << endl;15 return -1;16 17 18 /set address and bind socket19 struct sockaddr_in server_addr;20 server_addr.sin_family = AF_INET;21

9、server_addr.sin_port = htons(5555);22 server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");23 24 if(connect(client_socket,(struct sockaddr*)&server_addr,sizeof(server_addr) < 0)25 26 cout << "connect server eror" << endl;27 close(client_socket);28 return -1;29 30 31 char bufBUFSIZE;32 if(recv(client_socket,buf,BUFSIZE,0) < 0)33 34 close(client_socket);35 return -1;36 37 else38 39 cout << buf << endl;40 close(client_socket);41 return 0;42 43

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号