孙鑫老师教学视频学习笔记——网络套接字
2009-06-26 16:59
519 查看
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));
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));
相关文章推荐
- 孙鑫老师VC++教学视频学习笔记
- 孙鑫老师教学视频学习笔记——对话框
- 孙鑫老师教学视频学习笔记——单文档中菜单操作
- 孙鑫老师教学视频学习笔记――文字处理
- 孙鑫老师教学视频学习笔记――单文档中实现画笔及画刷
- 【C++学习笔记】简单的多线程程序(摘自孙鑫C++教学视频)
- 看了孙鑫老师的vc视频,今天又在大侠的blog里,即http://blog.csdn.net/hbyufan/ 中发现有相关笔记,转贴学习
- VC++中属性页(向导)的实现 (学习孙鑫老师视频笔记)
- 韩顺平 javascript教学视频_学习笔记13_类和对象细节_创建对象的几种方式_js对象内存分析
- 看郭克华老师的视频教学笔记(序言)
- 郭霖老师androidpn教学视频笔记
- 孙鑫教学视频笔记(17)进程间通信
- 孔浩老师 Lucene 视频教程学习笔记(第2讲)
- 孙鑫老师的教学笔记(转)
- 安卓学习笔记汇总----极客学院安卓教学视频观看所做的笔记和自己的理解
- 播布客教学视频_C学习笔记_4_判断奇偶
- Linux学习笔记(观看韩顺平老师Linux视频的总结)
- 看郭克华老师的视频教学笔记(六)
- 看孙鑫老师VC++视频教程笔记 之 多线程编程(三)
- 韩顺平 javascript教学视频_学习笔记23_js事件驱动机制深入理解_js常用事件_js版计算器