孙鑫老师教学视频学习笔记——网络套接字

简介:
OSI七层参考模型:物理层  数据链路层  网络层  传输层  会话层  表示层  应用层 
TCP/IP模型包括4层:网络接口  网络层   传输层   应用层
TCP/IP使用16位整数和32位整数的高位先存格式。
套接字类型:流式套接字(SOCK_STREAM),基于TCP协议;数据报套接字(SOCK_DGRAM)基于UDP协议  
         原始套接字(SOCK_RAW);
基于TCP的socket编程
服务器端程序:(1)创建套接字(socket);(2)将套接字绑定到一个本地地址和端口上(bind);(3)将
套接字设为监听模式,准备接收客户请求(listen);(4)等待客户请求到来,当请求到来时、后,接
受连接请求,返回一个新的对应于此连接的套接字(accept);(5)用返回的套接字和客户端进行通
信(send/recv);(6)返回,等待另一客户请求;(7)关闭套接字。
客户端程序:(1)创建套接字(socket);(2)向服务器发出连接请求(connect);(3)和服务器进行通信
(send/recv);(4)关闭套接字。
基于UDP的socket编程
服务器端(接收端)程序:(1)创建套接字(socket);(2)将套接字绑定到一个本地地址和端口上
(bind);(3)等待接受数据(recvfrom);(4)关闭套接字。
客户端(发送端)程序:(1)创建套接字(socket);(2)向服务器端发送数据(sendto);(3)关闭套接字

///*******************TCP***********************///
//加载套接字库和进行套接字库的版本协商
int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
//创建套接字
SOCKET socket(int af, int type, int protocol);
SOCKET socket(AF_INET, SOCK_STREAM,0);
//绑定套接字
int bind(SOCKET s, const struct sockaddr FAR *name, int namelen);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//htonl用来转化为网络字节序
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR)&addrSrv,sizeof(SOCKADDR));
//设置套接字为监听模式
int listen(SOCKET s, int backlog);
listen(sockSrv,5);
//等待客户的连接到来,并接收                     
SOCKET accept(SOCKET s, struct sockaddr FAR *addr, int FAR *addrlen);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
//发送数据
int send(SOCKET s, const char FAR *buf, int len, int flags);
send(sockConn, sendBuf, strlen(sendBuf)+1, 0);
//接收数据
int recv(SOCKET s, char FAR *buf, int len, int flags);
recv(sockConn, recvBuf, 100, 0);
//关闭套接字
closesocket(sockConn);
//客户端连接服务器端
int connect(SOCKET s, const struct sockaddr FAR *name, int namelen);
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");//转化为u_long类型
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//最后用WSACleanup();终止对套接字库的调用,其他的都和服务器端一样
///*******************UDP***********************///
//加载套接字库和进行套接字库的版本协商
int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
//创建套接字
SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR)&addrSrv,sizeof(SOCKADDR));
//接收数据
int recvfrom(SOCKET s, char FAR *buf, int len, int flags, 
         struct sockaddr FAR *from,int FAR *formlen);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR)
recvfrom(sockSrv, recvBuf, 100, 0, (SOCKADDR*)&addrClient, &len);
//结束后关闭套接字
closesocket(sockSrv);
WSACleanup();
//客户端发送数据
int sendto(SOCKET s, const char FAR *buf, int len, int flags, 
         const struct sockaddr FAR *to, int tolen);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
sendto(sockClient,"hello",strlen("hello")+1,0,
          (SOCKADDR*)&addrSrv,sizeof(SOCKADDR));


本文转自jazka 51CTO博客,原文链接:http://blog.51cto.com/jazka/170082,如需转载请自行联系原作者
相关文章
|
2月前
|
机器学习/深度学习 监控 算法
m基于深度学习网络的活体人脸和视频人脸识别系统matlab仿真,带GUI界面
m基于深度学习网络的活体人脸和视频人脸识别系统matlab仿真,带GUI界面
38 0
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真
|
3月前
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十二 ):TCP服务器(并发网络编程io多路复用epoll)
Linux C/C++ 开发(学习笔记十二 ):TCP服务器(并发网络编程io多路复用epoll)
56 0
|
3月前
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
39 0
|
1月前
|
网络协议 安全 网络安全
Qt 套接字类(QTcpSocket和QUdpSocket)解密:迈向 Qt 网络编程之巅
Qt 套接字类(QTcpSocket和QUdpSocket)解密:迈向 Qt 网络编程之巅
91 0
|
1月前
|
网络协议 Unix 开发者
套接字网络协议支持
套接字网络协议支持
10 1
|
1月前
|
网络协议 Java API
网络编程套接字(2)
网络编程套接字(2)
|
1月前
|
网络协议 Java
网络编程套接字(1)
网络编程套接字(1)
|
2月前
|
数据采集 数据安全/隐私保护
高效网络采集实践:使用 Haskell 和 html-conduit 下载 www.baidu.com 视频完整教程
网络采集在当今信息时代中发挥着关键作用,用于从互联网上获取数据并进行分析。本文将介绍如何使用 Haskell 进行网络编程,从数据采集到图片分析,为你提供一个清晰的指南。我们将探讨如何使用爬虫代理来确保高效、可靠的数据获取,并使用 Haskell 的强大功能来分析和处理数据。
|
2月前
|
域名解析 存储 网络协议
某教程学习笔记(一):03、网络基础
某教程学习笔记(一):03、网络基础
15 0