C++加载socket库 及 server端并并发多客户端服务

1:// Socket2.0

#include

#pragma comment (lib, “ws2_32.lib”);

// Socket1.1

#include

#pragma comment (lib, “wsock32.lib”);

 

 

  Local.sin_addr.s_addr = htonl(INADDR_ANY);

常见方式: 

       const char c_sLocalIP[] = "192.168.0.100 ";

  SOCKADDR_IN Local; 
  Local.sin_addr.s_addr = inet_addr(c_sLocalIP); //明确方式使用      

  bind(socket, (LPSOCKADDR)&c_sLocal, sizeof(SOCKADDR_IN)

如果你在bind时, 使用了INADDR_ANY 那么,你将可以在所有有效的地址上监听,但是socket有一个特性:可以在同意端口上绑定多个socket。

 2:

windows:iocp模型


linux: pipo模型
 
 
 

 

 

 

好的,以下是一个简单的C++ socket服务器,它可以读取本地的TXT文件并发送给客户端: ```c++ #include <iostream> #include <fstream> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #define PORT 8080 int main() { int server_fd, new_socket, valread; struct sockaddr_in address; int opt = 1; int addrlen = sizeof(address); char buffer[1024] = {0}; char* hello = "Hello from server"; // 创建socket文件描述符 if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) { perror("socket failed"); exit(EXIT_FAILURE); } // 设置socket选项 if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) { perror("setsockopt"); exit(EXIT_FAILURE); } address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(PORT); // 绑定socket到指定口 if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) { perror("bind failed"); exit(EXIT_FAILURE); } // 监听socket if (listen(server_fd, 3) < 0) { perror("listen"); exit(EXIT_FAILURE); } // 接受客户端连接 if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) { perror("accept"); exit(EXIT_FAILURE); } // 读取本地TXT文件并发送给客户端 std::ifstream file("example.txt"); std::string file_contents((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>()); const char* data = file_contents.c_str(); send(new_socket, data, strlen(data), 0); std::cout << "File sent to client" << std::endl; return 0; } ``` 在上述代码中,我们使用C++的fstream读取了本地的TXT文件,并将文件内容发送给客户端。请注意,此示例代码仅适用于本地运行,如果要在互联网上运行,则需要使用公共IP地址和口号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值