网络编程 TCP
来源:互联网 发布:添加软件源请求超时 编辑:程序博客网 时间:2024/05/16 10:30
参考孙鑫视频...
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--工具--错误查找中,输入该错误码查找错误!
0 0
- TCP/IP网络编程
- TCP/IP网络编程
- dotnet 网络编程 tcp
- 网络编程TCP
- 网络编程 TCP
- 网络编程 TCP续
- 网络编程—TCP
- 网络编程(tcp文件服务器)
- TCP网络编程
- java 网络编程 TCP
- 网络编程--TCP协议
- TCP网络编程&&UDP
- QT网络编程-TCP
- 网络编程之TCP
- 网络编程 UDP TCP
- 网络编程--TCP
- 网络编程TCP
- 网络编程(TCP/UDP)
- MFC中动态生成CComBox,响应CComBox选中项的消息ON_CBN_SELCHANGE,并获取项的值
- 南阳oj题目35 表达式求值【栈的应用】
- 逻辑回归及美团逻辑回归总结
- GTK入门学习:Libglade 和 GtkBuilder 的区别使用
- 如何在工程中使用自定义字体
- 网络编程 TCP
- Mybatis的小错误--Could not find resource
- openGL多边形内填充
- jquery插件编写(以折叠面板为例)
- HDUOJ 18岁生日 题目1201
- Swift学习笔记(十八)——字符串String.Index和Range详解
- Nginx/LVS/HAProxy负载均衡软件的优缺点详解
- Java中的参数传递方式
- modelsim 相关