不用vs,c 语言windows下编写socket,用gcc编译
来源:互联网 发布:linux 声卡驱动 编辑:程序博客网 时间:2024/06/04 23:20
windows下socket一般都要vs,因为socket运行库可能在win-sdk里
反正在system32里我没找到ws2.32.lib,因此需要下载一份这个,如果能在其他地方找到也可以,点击这里可以WS2.32下载我上传到云盘里的文件,密码:10nc。首先写两份代码,client.cpp, server.cpp
代码出自–可乐爱上了雪碧
client.cpp
#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 argc, char * argv[]){ WSADATA Ws; SOCKET ClientSocket; struct sockaddr_in ServerAddr; int Ret = 0; int AddrLen = 0; HANDLE hThread = NULL; char SendBuffer[MAX_PATH]; //Init Windows Socket if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 ) { cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl; return -1; } //Create Socket ClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if ( ClientSocket == INVALID_SOCKET ) { cout<<"Create Socket Failed::"<<GetLastError()<<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); Ret = connect(ClientSocket,(struct sockaddr*)&ServerAddr, sizeof(ServerAddr)); if ( Ret == SOCKET_ERROR ) { cout<<"Connect Error::"<<GetLastError()<<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<<"Send Info Error::"<<GetLastError()<<endl; break; } } closesocket(ClientSocket); WSACleanup(); return 0;}
server.cpp
//Server.cpp#include <iostream>#include <winsock2.h>using namespace std;#pragma comment(lib, "ws2_32.lib")#define PORT 4000#define IP_ADDRESS "127.0.0.1"DWORD WINAPI ClientThread(LPVOID lpParameter){ SOCKET CientSocket = (SOCKET)lpParameter; int Ret = 0; char RecvBuffer[1024]; while ( true ) { memset(RecvBuffer, 0x00, sizeof(RecvBuffer)); Ret = recv(CientSocket, RecvBuffer, 1024, 0); if ( Ret == 0 || Ret == SOCKET_ERROR ) { cout<<"客户端退出!"<<endl; break; } cout<<"接收到客户信息为:"<<RecvBuffer<<endl; } return 0;}int main(int argc, char* argv[]){ WSADATA Ws; SOCKET ServerSocket, ClientSocket; struct sockaddr_in LocalAddr, ClientAddr; int Ret = 0; int AddrLen = 0; HANDLE hThread = NULL; //Init Windows Socket if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 ) { cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl; return -1; } //Create Socket ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if ( ServerSocket == INVALID_SOCKET ) { cout<<"Create Socket Failed::"<<GetLastError()<<endl; return -1; } LocalAddr.sin_family = AF_INET; LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS); 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 Failed::"<<GetLastError()<<endl; return -1; } //listen Ret = listen(ServerSocket, 10); if ( Ret != 0 ) { cout<<"listen Socket Failed::"<<GetLastError()<<endl; return -1; } cout<<"服务端已经启动"<<endl; while ( true ) { AddrLen = sizeof(ClientAddr); ClientSocket = accept(ServerSocket, (struct sockaddr*)&ClientAddr, &AddrLen); if ( ClientSocket == INVALID_SOCKET ) { cout<<"Accept Failed::"<<GetLastError()<<endl; break; } cout<<"客户端连接::"<<inet_ntoa(ClientAddr.sin_addr)<<":"<<ClientAddr.sin_port<<endl; hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)ClientSocket, 0, NULL); if ( hThread == NULL ) { cout<<"Create Thread Failed!"<<endl; break; } CloseHandle(hThread); } closesocket(ServerSocket); closesocket(ClientSocket); WSACleanup(); return 0;}
ok ,现在我们开始编译:
- 你需要有window的gun的gcc,g++编译器,没有的话自行下载 MinGW
让cmd到你当前两个文件和ws2.32所在目录:
分别执行命令 g++ -o server server.cpp -L ./ -lWS2_32
g++ -o client client.cpp -L ./ -lWS2_32
-L ./ 表示路劲 -l 表示动态库的名称注意路劲,不然会出错 。
3.在当前cmd 运行server, 再打开一个cmd运行client,ok。
阅读全文
1 0
- 不用vs,c 语言windows下编写socket,用gcc编译
- Gcc在Windows下编写C语言
- 用VS编译C语言
- 用VS编译C语言
- windows编译xgboost-python,不用vs编译
- gcc编译C语言
- mac 下 不用Xcode, 用gcc自己编译OpenGL工程
- Windows环境下用记事本编写C语言
- 在windows下用C语言写socket通讯实例
- 用C语言编写Socket程序
- windows 下使用gcc编译. c文件的实现方法。
- gcc初谈(ubuntu下编译C语言)
- ubuntu下利用gcc编译C语言程序
- C语言程序GCC下编译过程透视
- 在windows下编译object-c语言
- Windows下编译C语言文件
- Windows下用vs编译lua
- Linux下用gcc编译c程序
- 14 类型信息
- 让评论指定为某文章评论
- 递归基础之李白打酒
- MySQL 显示表字段和表插方法
- 平凡的世界——少平写给晓霞的信
- 不用vs,c 语言windows下编写socket,用gcc编译
- 微信小程序上传文件问题
- 16 数组
- Android 6.0 权限适配(PermissionsDipatcher)
- 解决SlidingMenu滑动Menu无法关闭菜单的问题
- 关于vs2015/2013创建opencv项目提示0xc000007b问题
- hibernate 插件(Jboss Tools) 的安装方法
- 清除浮动
- C++11类型别名