windows环境下用c++实现socket编程 的各种问题

https://blog.csdn.net/xiaoquantouer/article/details/58001960

这篇socket入门,别人一运行就成功了,自己不行。心累

问题1 

gcc sever.cpp -o sever 不能用,好像是gcc,g++应用与c,c++的问题,我用了g++ sever.cpp -o sever -lwsock32

这需要在tasks.json里修改

tasks.json的打开方式 https://blog.csdn.net/bigfresh_chy/article/details/112396503

 

问题2.

见我的提问链接

https://ask.csdn.net/questions/6887966

运行了也生成exe却没有像别人一样弹出窗口,后来知道需要分别在两个终端运行powershell命令 start c1.exe,此时弹出窗口但乱码,值得安慰的是至少信息传过去了,如图左边sever右边client

 

123

问题3 

有上文可见问题3就是乱码。我把汉字显示部分改成英文的了,显示正常,但我还是想用汉字表示出来。

友情提示:修改代码后,要CTRL-s,然后要删除掉之前生成的exe,再次运行cpp生成exe文件,再运行:)

搞了两小时没搞出来,应该是cmd与vscode编码之间的问题,未完待续...

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Windows系统下C语言非阻塞模式实现面向连接的socket编程的示例代码: 1. 创建socket ```c int sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == INVALID_SOCKET) { printf("Error creating socket: %d\n", WSAGetLastError()); WSACleanup(); return 1; } ``` 2. 设置非阻塞模式 ```c unsigned long mode = 1; int result = ioctlsocket(sock, FIONBIO, &mode); if (result != NO_ERROR) { printf("Error setting non-blocking mode: %d\n", WSAGetLastError()); closesocket(sock); WSACleanup(); return 1; } ``` 3. 连接服务器 ```c struct sockaddr_in server_address; memset(&server_address, 0, sizeof(server_address)); server_address.sin_family = AF_INET; server_address.sin_port = htons(port); InetPton(AF_INET, server_ip, &server_address.sin_addr); result = connect(sock, (struct sockaddr*)&server_address, sizeof(server_address)); if (result == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK) { printf("Error connecting to server: %d\n", WSAGetLastError()); closesocket(sock); WSACleanup(); return 1; } ``` 4. 使用select函数等待连接完成 ```c fd_set write_fds; FD_ZERO(&write_fds); FD_SET(sock, &write_fds); struct timeval timeout; timeout.tv_sec = 5; timeout.tv_usec = 0; result = select(0, NULL, &write_fds, NULL, &timeout); if (result == 0) { printf("Connection timed out.\n"); closesocket(sock); WSACleanup(); return 1; } else if (result == SOCKET_ERROR) { printf("Error waiting for connection: %d\n", WSAGetLastError()); closesocket(sock); WSACleanup(); return 1; } ``` 5. 发送数据 ```c const char* message = "Hello, server!"; result = send(sock, message, strlen(message), 0); if (result == SOCKET_ERROR) { printf("Error sending data: %d\n", WSAGetLastError()); closesocket(sock); WSACleanup(); return 1; } ``` 6. 接收数据 ```c char buffer[1024]; result = recv(sock, buffer, sizeof(buffer), 0); if (result == SOCKET_ERROR) { printf("Error receiving data: %d\n", WSAGetLastError()); closesocket(sock); WSACleanup(); return 1; } else { buffer[result] = '\0'; printf("Received data: %s\n", buffer); } ``` 7. 关闭socket ```c closesocket(sock); WSACleanup(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值