网络编程 TCP
2015-07-27 16:38
531 查看
参考孙鑫视频...
TCP:Transmission Control Protocol 传输控制协议。
UDP(User Datagram Protocol),用户数据包协议。
TCP和UDP对比:
a)TCP是面向连接的传输控制协议,而UDP提供了面向无连接的数据报服务
b)TCP具有高可靠性,确保数据的正确性,不出现丢失和乱序;比如下载程序,用的肯定是TCP协议
UDP在传输前不建立连接,不对数据报进行检查和修改,无需等待对方的应答,所以会出现分组丢失、重复、乱序、
应用程序需要负责传输可靠性方面的所有工作。
c)由于以上特征,UDP具有较好的实时性,工作效率比TCP高。在一些聊天程序中往往使用UDP协议。
UDP的段结构比TCP的段结构简单,因此网络开销小。
1、服务器端程序
2、客户端程序
3、程序编写流程:
note:别忘记附加ws2_32.lib库。然后再建立套接字和绑定时,可以写if语句判断一下,创建套接字、绑定是否成功等。WSAGetLastError()函数可以输出错误码。可以到VS--工具--错误查找中,输入该错误码查找错误!
TCP:Transmission Control Protocol 传输控制协议。
UDP(User Datagram Protocol),用户数据包协议。
TCP和UDP对比:
a)TCP是面向连接的传输控制协议,而UDP提供了面向无连接的数据报服务
b)TCP具有高可靠性,确保数据的正确性,不出现丢失和乱序;比如下载程序,用的肯定是TCP协议
UDP在传输前不建立连接,不对数据报进行检查和修改,无需等待对方的应答,所以会出现分组丢失、重复、乱序、
应用程序需要负责传输可靠性方面的所有工作。
c)由于以上特征,UDP具有较好的实时性,工作效率比TCP高。在一些聊天程序中往往使用UDP协议。
UDP的段结构比TCP的段结构简单,因此网络开销小。
1、服务器端程序
#include <WinSock2.h> #include <stdio.h> int main() { //加载套接字库,1.1版本 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return 0; } if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return 0; } //创建套接字 SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0); //bind,将套接字绑定到一个本地地址和端口上 SOCKADDR_IN addrSrv; 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)); //监听 listen(sockSrv,5); //accept 接收 SOCKADDR_IN addrCli;//用于接收从客户端传来的地址信息和端口信息 int len = sizeof(SOCKADDR); while(true) { SOCKET sockCli = accept(sockSrv,(SOCKADDR *)&addrCli,&len);//用此次返回的套接字进行通信 char sendBuf[100]; sprintf(sendBuf,"welcome %s to http://www.sau.com",inet_ntoa(addrCli.sin_addr)); send(sockCli,sendBuf,sizeof(sendBuf)+1,0); char recvBuf[100]; recv(sockCli,recvBuf,sizeof(recvBuf),0); printf("%s\n",recvBuf); closesocket(sockCli); } }
2、客户端程序
#include <WinSock2.h> #include <stdio.h> int main() { //加载套接字库,1.1版本 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return 0; } if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return 0; } //创建套接字 SOCKET sockClinet = socket(AF_INET,SOCK_STREAM,0); // SOCKADDR_IN addrSer;//要发送给的服务端的地址信息和端口号 addrSer.sin_addr.S_un.S_addr = inet_addr("59.73.163.254"); addrSer.sin_family = AF_INET; addrSer.sin_port = htons(6000); //连接 connect(sockClinet,(SOCKADDR *)&addrSer,sizeof(SOCKADDR)); char recvBuf[100]; recv(sockClinet,recvBuf,100,0); printf("%s\n",recvBuf); send(sockClinet,"this is liushuanpeng",strlen("this is liushuanpeng")+1,0); closesocket(sockClinet); WSACleanup();//终止套接字库的使用 }
3、程序编写流程:
note:别忘记附加ws2_32.lib库。然后再建立套接字和绑定时,可以写if语句判断一下,创建套接字、绑定是否成功等。WSAGetLastError()函数可以输出错误码。可以到VS--工具--错误查找中,输入该错误码查找错误!
相关文章推荐
- 计算机网络基础
- CentOS使用指南一(网络配置)
- 网络布局基础
- http status code
- http断点续传原理:http头Range 、 Content-Range
- HTTP协议
- HTTP/1.0与HTTP/1.1之间的差别
- ACM学习历程—SNNUOJ 1110 传输网络((并查集 && 离线) || (线段树 && 时间戳))(2015陕西省大学生程序设计竞赛D题)
- Cocos2d-x 3.6 HttpRequest设置回调的方法
- 网络流最小费用最大流建图些许方法
- Python网络编程Demo
- http2的一些新特性
- RHEL十(网络)
- 修改Linux内核参数,减少TCP连接中的TIME-WAIT sockets
- Android4.0以上HttpURLConnection出FileNotFoundException异常解决
- 学而时习之,温故而知新——近期新接触的概念、重温以前的概念
- 网络远程教育实施方案交流之(二)——网络教育平台项目的建设
- android httpClient 支持HTTPS的2种处理方式
- 一次完整的HTTP请求所经历的7个步骤
- Java安全(加密、摘要、签名、证书、SSL、HTTPS)