Socket 连接简易编程
来源:互联网 发布:单片机开发和java 编辑:程序博客网 时间:2024/04/28 14:23
客户端:
#include <iostream>#include <winsock2.h>using namespace std;#pragma comment (lib, "ws2_32.lib")#define PORT 4000#define IP_ADDRESS "127.0.0.1"int main(int agrc, char * agrv[]){ WSADATA ws; SOCKET ClientSocket; struct sockaddr_in ServerAddr; int Ret = 0; int AddrLen = 0; HANDLE hTread = NULL; char SendBuffer[MAX_PATH]; int errorcode = 0; //Init Window Socket if ((errorcode = WSAStartup(MAKEWORD(2, 2), &ws)) != 0) { cout << "Init Windows Socket Failed::" << errorcode << endl; return -1; } // Create Socket ClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (ClientSocket == INVALID_SOCKET) { cout << "Create Socket Failed::" << WSAGetLastError() << endl; return -1; } ServerAddr.sin_family = AF_INET; ServerAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS); ServerAddr.sin_port = htons(PORT); memset(ServerAddr.sin_zero, 0x00, 8); // connect Ret = connect(ClientSocket, (struct sockaddr*)&ServerAddr, sizeof(ServerAddr)); if (Ret == SOCKET_ERROR) { cout << "Connect Error::" << WSAGetLastError() << endl; return -1; }else{ cout << "连接成功!!" << endl; } while (true) { cin.getline(SendBuffer, sizeof(SendBuffer)); Ret = send(ClientSocket, SendBuffer, (int)strlen(SendBuffer), 0); if (Ret == SOCKET_ERROR) { cout << "Sentd Info Error::" << GetLastError() << endl; break; } } closesocket(ClientSocket); WSACleanup(); return 0;}
服务端:
#include <iostream>#include <WinSock2.h>using namespace std;#pragma comment (lib, "ws2_32.lib")#define PORT 4000#define IP_ADDREESS "127.0.0.1"int main(int agrc, char* argc[]){ WSADATA ws; // 之后储存WSAStartUP返回 的数据, 全称:Windows Socker API Data SOCKET ServerSocket = 0, ClientSocket = 0; struct sockaddr_in LocalAddr, ClientAddr; int errorcode; int Ret = 0; int AddrLen = 0; HANDLE hThread = NULL; //Init Windwos Socket if ((errorcode = WSAStartup(MAKEWORD(2, 2), &ws)) != 0) { cout << "Create Socket Failed:" << errorcode << endl; return -1; } // CreateSocket ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (ServerSocket == INVALID_SOCKET) { cout << "Create Socket Failed::" << WSAGetLastError() << endl; return -1; } LocalAddr.sin_family = AF_INET; LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDREESS); //将ip 127.0.0.1 转换成网络字节序 LocalAddr.sin_port = htons(PORT); // 转换为网络字节序 memset(LocalAddr.sin_zero, 0x00, 8); //Bind Socket Ret = bind(ServerSocket,(struct sockaddr*)&LocalAddr, sizeof(LocalAddr)); if (Ret != 0) { cout << "Bind Socket Failded::" << WSAGetLastError() << endl; return -1; } // listen Ret = listen(ServerSocket, 10); if(Ret != 0) { cout << "Listen Socket Failed::" << WSAGetLastError() << endl; return -1; } cout << " 服务端已经启动!" << endl; while (true) { AddrLen = sizeof(ClientAddr); ClientSocket = accept(ServerSocket, (struct sockaddr*)&ClientAddr, &AddrLen); if (ClientSocket == INVALID_SOCKET) { cout << "Accept Failed::" << WSAGetLastError() << endl; break; } char RecvBuffer[MAX_PATH]; while (true) { memset(RecvBuffer, 0x00, sizeof(RecvBuffer)); // 接收数据 // recv函数返回实际copy的字节数; // copy时出错,返回SOCKET_ERROR;等待协议接收数据时网络中断,返回0。 Ret = recv(ClientSocket, RecvBuffer, MAX_PATH, 0); if (Ret == 0 || Ret == SOCKET_ERROR) { cout << "Recv Failed::" << WSAGetLastError() << endl; break; } cout << "接收到的客户信息为:" << RecvBuffer << endl; } } closesocket(ServerSocket); closesocket(ClientSocket); WSACleanup(); return 0;}
AF_INET 与 AF_INET6
AF_INET(又称 PF_INET)是 IPv4 网络协议的套接字类型,AF_INET6 则是 IPv6 的;而 AF_UNIX 则是 Unix 系统本地通信。
选择 AF_INET 的目的就是使用 IPv4 进行通信。因为 IPv4 使用 32 位地址,相比 IPv6 的 128 位来说,计算更快,便于用于局域网通信。
而且 AF_INET 相比 AF_UNIX 更具通用性,因为 Windows 上有 AF_INET 而没有 AF_UN
0 0
- Socket 连接简易编程
- Socket编程实现简易聊天室
- linux下简易socket编程
- Socket编程 简易测试socket TCP程序
- Socket编程 简易测试socket UDP
- 【linux 编程】BSD Socket 简易入门手册
- 【linux 编程】BSD Socket 简易入门手册
- socket编程---简易的TCP通信
- 【Socket编程】Python实现简易Web服务器
- 整理socket编程<一>:win32 socket简易服务器开发
- IOS编程Socket连接处理
- win32 Socket网络编程连接
- 面向连接的Socket编程
- Socket 长连接 短连接 心跳 JAVA SOCKET编程
- Socket 长连接 短连接 心跳 JAVA SOCKET编程
- 利用socket网络编程,实现的简易CS计算器
- JAVA通过Swing和socket编程实现简易点对点聊天
- Android学习笔记三十二:Socket编程实现简易聊天室
- 代码调试之Tagger:Deep Unsupervised Perceptual Grouping
- n选m排列问题的递归算法
- Java装饰模式
- 增强学习(二)----- 马尔可夫决策过程MDP
- 利用Dagger2构建的简易MVP框架
- Socket 连接简易编程
- Java SSM 商户管理系统 客户管理 库存管理 销售报表 项目源码
- 机器学习&数据挖掘知识点大总结
- java中构造方法及其作用
- Linux/Centos下安装与使用Nginx(1)
- Win7安装Genymotion2.8.1出现的问题(未破解版)
- 素数的优化求法
- 面试-测试开发如何考察-应届生
- xcode中查看ios sdk版本