简易TCP与UDP编程模型
来源:互联网 发布:福师大网络教育 编辑:程序博客网 时间:2024/04/29 22:42
TCP服务端与客户端分别调用API函数的流程图:
服务端代码:
// TcpServer.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <windows.h>#include <Winsock2.h>#pragma comment(lib, "Ws2_32.lib")int main(int argc, char* argv[]){ WSADATA wsd; //WSADATA变量SOCKET sServer,sClient; //服务端套接字,客户端套接字int nRetVal; //返回值printf("*****************************TCP服务端*******************************\n");//初始化套接字动态库if (WSAStartup(MAKEWORD(2,2), &wsd) != 0){printf("WSAStartup failed!\n");return 1;}//创建套接字sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (INVALID_SOCKET == sServer){printf("socket failed!\n");return -1; //释放套接字资源}SOCKADDR_IN addrServer; //服务器地址//服务器套接字地址addrServer.sin_family = AF_INET;addrServer.sin_port = htons(4999);addrServer.sin_addr.s_addr = INADDR_ANY;//绑定套接字nRetVal = bind(sServer, (LPSOCKADDR)&addrServer, sizeof(SOCKADDR_IN));if (SOCKET_ERROR == nRetVal){printf("bind failed!\n");closesocket(sServer); //关闭套接字WSACleanup(); //释放套接字资源return -1; }//开始监听nRetVal = listen(sServer, 1);if (SOCKET_ERROR == nRetVal){printf("listen failed!\n");closesocket(sServer); //关闭套接字WSACleanup(); //释放套接字资源return -1;}//接收客户端请求SOCKADDR_IN addrClient;int addrClientLen = sizeof(addrClient);sClient = accept(sServer, (LPSOCKADDR)&addrClient, &addrClientLen);if (INVALID_SOCKET == sClient){printf("accept failed!\n");closesocket(sServer); //关闭套接字WSACleanup(); //释放套接字资源return -1;}char szBuf[MAX_PATH];ZeroMemory(szBuf, MAX_PATH);nRetVal = recv(sClient, szBuf, MAX_PATH, 0);if (SOCKET_ERROR == nRetVal){printf("recv failed!\n");closesocket(sServer); //关闭套接字closesocket(sClient); //关闭套接字WSACleanup(); //释放套接字资源return -1;}printf("%s\n", szBuf); //输出客户端发送来的信息//退出closesocket(sServer); //关闭套接字closesocket(sClient); //关闭套接字WSACleanup(); //释放套接字资源return 0;}
客户端代码:
// TcpClient.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <windows.h>#include <Winsock2.h>#pragma comment(lib, "Ws2_32.lib")int main(int argc, char* argv[]){WSADATA wsa; //WSADATA变量SOCKET sServer; //服务端套接字SOCKADDR_IN addrServer; //服务端地址char szBuf[MAX_PATH]; //接收数据缓冲区int nRetVal; //返回值printf("*****************************TCP客户端*******************************\n");//初始化套接字动态库if (WSAStartup(MAKEWORD(2,2), &wsa) != 0){printf("WSAStartup failed!\n");return -1;}//创建套接字sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (INVALID_SOCKET == sServer){printf("socket failed!\n");WSACleanup();return -1;}//设置服务端地址addrServer.sin_family = AF_INET;addrServer.sin_addr.s_addr = inet_addr("192.168.1.138");addrServer.sin_port = htons(4999);int nAddrServerLen = sizeof(addrServer);//连接服务器nRetVal = connect(sServer, (LPSOCKADDR)&addrServer, sizeof(addrServer));if (SOCKET_ERROR == nRetVal){printf("connect failed!\n");closesocket(sServer); //关闭套接字WSACleanup(); //释放套接字资源return -1; }//向服务端发送数据ZeroMemory(szBuf, MAX_PATH);strcpy(szBuf, "SimpleTcpDemo");nRetVal = send(sServer, szBuf, strlen(szBuf), 0);if (SOCKET_ERROR == nRetVal){printf("send failed!\n");closesocket(sServer); //关闭套接字WSACleanup(); //释放套接字资源return -1; }//退出closesocket(sServer); //关闭套接字WSACleanup(); //释放套接字资源return 0;}
wireshark抓包效果:
UDP服务端与客户端分别调用API函数的流程图:
服务端代码:
// UdpServer.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <windows.h>#include <WINSOCK2.H>#pragma comment(lib, "Ws2_32.lib")int main(int argc, char* argv[]){WSADATA wsa; //WSADATA变量SOCKET s; //套接字printf("*****************************UDP服务端*******************************\n");//初始化套接字动态库if (WSAStartup(MAKEWORD(2,2), &wsa) != 0){printf("WSAStartup failed!\n");return 1;}//创建套接字s = socket(AF_INET, SOCK_DGRAM, 0);if (s == INVALID_SOCKET){printf("socket() failed; %d\n", WSAGetLastError());WSACleanup(); //释放套接字资源return 1;}SOCKADDR_IN addrServer; //服务器地址//服务器地址addrServer.sin_family = AF_INET;addrServer.sin_port = htons(5000); //端口addrServer.sin_addr.s_addr = htonl(INADDR_ANY); //IP//绑定if (bind(s, (LPSOCKADDR)&addrServer, sizeof(addrServer)) == SOCKET_ERROR){printf("bind() failed: %d\n", WSAGetLastError());closesocket(s); //关闭套接字WSACleanup(); //释放套接字资源return 1; }char szBuf[MAX_PATH]; //接收数据缓冲区//接收数据SOCKADDR_IN addrClient;int nClientLen = sizeof(addrClient);ZeroMemory(szBuf, MAX_PATH);if (recvfrom(s, szBuf, MAX_PATH, 0, (LPSOCKADDR)&addrClient, &nClientLen) == SOCKET_ERROR){printf("recvfrom() failed: %d\n", WSAGetLastError());closesocket(s); //关闭套接字WSACleanup(); //释放套接字资源return 1;}printf("%s\n", szBuf); //输出客户端发送来的数据closesocket(s); //关闭套接字WSACleanup(); //释放套接字资源return 0;}
客户端代码:
// udpClient.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <windows.h>#include <WINSOCK2.H>#pragma comment(lib, "Ws2_32.lib")int main(int argc, char* argv[]){WSADATA wsa; //WSADATA变量SOCKET s; //套接字printf("*****************************UDP客户端*******************************\n");//初始化动态库动态库if (WSAStartup(MAKEWORD(2,2), &wsa) != 0){printf("WSAStartup failed!\n");return 1;}//创建套接字s = socket(AF_INET,SOCK_DGRAM, 0);if (INVALID_SOCKET == s){printf("socket() failed; %d\n", WSAGetLastError());WSACleanup(); //释放套接字资源 return 1;}char szBuf[MAX_PATH];ZeroMemory(szBuf, MAX_PATH);strcpy(szBuf, "SimpleUdpDemo");//服务器地址SOCKADDR_IN addrServer;addrServer.sin_family = AF_INET;addrServer.sin_addr.s_addr = inet_addr("192.168.1.138");addrServer.sin_port = htons(5000);int nAddrServerLen = sizeof(addrServer);if (sendto(s, szBuf, MAX_PATH, 0, (LPSOCKADDR)&addrServer, nAddrServerLen) == SOCKET_ERROR){printf("sendto() failed: %d\n", WSAGetLastError());closesocket(s); //关闭套接字WSACleanup(); //释放套接字资源return 1;}closesocket(s); //关闭套接字WSACleanup(); //释放套接字资源return 0;}
wireshark抓包效果:
1 0
- 简易TCP与UDP编程模型
- 【Linux网络编程】TCP/UDP编程模型
- socket与TCP/UDP编程~
- socket与TCP/UDP编程~
- socket与TCP/UDP编程~
- socket与TCP/UDP编程
- socket与TCP/UDP编程
- udp与tcp编程区别
- socket与TCP/UDP编程
- socket与TCP/UDP编程
- socket与TCP/UDP编程~
- Socket与TCP/UDP编程
- socket 与TCP/UDP编程
- TCP与UDP网络编程
- socket与TCP/UDP编程
- socket编程与TCP/UDP
- udp 与 tcp 通信编程
- Socket与TCP/UDP编程
- git中将多次commit合并为一次commit
- Epic 面试专题
- 三、Driver input system
- 多线程学习——生产者消费者模式练习
- Xcode 历史版本下载地址
- 简易TCP与UDP编程模型
- Sublime Text 的 快捷键及配置
- 扩展jQuery的功能限制只能输入数字
- rime输入法候选字横排显示
- Unity3D NGUI UIInput制作输入框屏蔽特殊字符(只允许输入正整数)
- 四、Driver - Misc
- 思念,
- 在Eclipse上配置bpel开发环境
- iOS类添加方法、属性学习笔记