赞
踩
目录
所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口
流式套接字 (SOCK_STREAM) :数据以字节流的方式进行传递,无大小限制. 保证数据可靠 , 无丢失 , 顺序发送. 主要用于 TCP 协议 . 一般情况下只要选择流式方式,那内核就会默认选择 TCP 传输层协议数据报套接字 (SOCK_DGRAM ) :主要通过数据报的方式发送,固定大小。不能保证数据可靠, 可能丢失 , 乱序发送 . 主要用于 UDP 协议 . 一般情况下只要选择数据报方式,那内核就会默认选择 UDP 传 输层协议原始套接字 (SOCK_RAW) :可以对较低层次协议如 IP 、 ICMP 直接访问
socket(); 创建套接字 .bind(); 绑定套接字listen(); 监听accept(); 接收客户端连接请求connect(); 主动发送连接请求close() ; 关闭套接字read()/write(); 数据收发
- //创建套接字
- int sockfd = socket(AF_INET, SOCK_STREAM, 0);
- if(sockfd == -1){
- perror("socket");
- exit(-1);
- }
- //保存地址信息
- struct sockaddr_in addr;//该结构体用于保存某个网络地址
-
- addr.sin_family = AF_INET;//设置地址族为IPV4
- addr.sin_port = htons(9090);//设置端口号
- addr.sin_addr.s_addr = inet_addr("192.168.22.84");//分配IP地址,此处涉及两层结构体
- //套接字绑定
- if( bind(sockfd, (struct sockaddr *)&addr, sizeof(addr) ) == -1){
- perror("bind");
- exit(-1);
- }
- printf("绑定成功\n");
- if( listen(sockfd, 5) == -1 ){
- perror("监听:");
- exit(-1);
- }
- printf("监听成功\n");
- //接收客户端请求
- //获取通信(连接)套接字,后续通信使用通信套接字,不使用监听套接字
- int comfd = accept(sockfd, NULL, NULL);
- if(comfd == -1){
- perror("获取通信套接字");
- exit(-1);
- }
- printf("通信套接字获取成功(接收成功)\n");
- //数据收发开始
- while(1){
- //memset(buf, 0, N);
- read(comfd, buf, N);
- puts(buf);
-
- //sleep(1);
- }
-
- //数据收发结束
- //关闭套接字
- close(comfd);
- close(sockfd);
服务器显示运行结果:
1、单独运行服务器,客户端未连接
2、客户端连接服务器,但未发送数据
(1)、客户端
(2)、服务器
3、客户端发送数据
(1)客户端
(2)服务器
4、多次测试结果
好的,以上就是本期内容了!!!
欢迎大家参考,指正!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。