不用vs,c 语言windows下编写socket,用gcc编译
2017-06-03 15:53
274 查看
windows下socket一般都要vs,因为socket运行库可能在win-sdk里
反正在system32里我没找到ws2.32.lib,因此需要下载一份这个,如果能在其他地方找到也可以,点击这里可以WS2.32下载我上传到云盘里的文件,密码:10nc。
首先写两份代码,client.cpp, server.cpp
代码出自–可乐爱上了雪碧
client.cpp
server.cpp
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。
反正在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, 4000 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。
相关文章推荐
- windows编译xgboost-python,不用vs编译
- 打造Windows环境下的GCC+VIM的程序编写编译新模式
- C语言写了一个socket server端,适合windows和linux,用GCC编译运行通过
- C语言写了一个socket client端,适合windows和linux,用GCC编译运行通过
- Windows下使用vim编写代码,使用nmake编译代码,使用vs来调试代码
- Windows下使用vim编写代码,使用nmake编译代码,使用vs来调试代码
- 【VSCode】Windows下VSCode编译调试c/c++【更新】
- windows平台上用arm-none-linux-gnueabi-g++4.6.3交叉编译websocket++
- VS支持GCC编译
- boost--windows平台下针对VS的简单编译
- windows 下使用gcc编译. c文件的实现方法。
- 抽取VS文件组成类GCC的编译器,并编译C程序为dll动态链接库
- windows 下,go语言 交叉编译
- 基于chyh1990/caffe-compact在windows vs2013上编译caffe步骤
- 用 C 语言编写 Windows 服务程序的五个步骤
- Linux下C语言编程基础知识--gcc编译器的使用、MakeFile文件的编写
- [C] 跨平台使用TCHAR——让Linux等平台也支持tchar.h,解决跨平台时的格式控制字符问题,多国语言的同时显示(兼容vc/gcc/bcb,支持Windows/Linux/Mac)
- Windows VS2017 下 使用 x265 第二回 x265编译调试续
- 将vs上编写的cocos2dx项目拿到eclipse上编译的步骤
- windows vs2017环境下编译webkit