C++socket编程(三):3.9 TCPServer移植到windows中
如下代码:
#ifdef WIN32
#include <Windows.h>
#define socklen_t int
#else
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#define closesocket close
#endif
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <thread>using namespace std;class TcpThread
{
public:void Main(){char buffer[1024] = { 0 };for (;;){int recvlen = recv(client, buffer, sizeof(buffer) - 1, 0); //第四个参数这个0是flag和系统相关,有很多自定一的操作,我们这边0就是不对他设置if (recvlen <= 0)break;buffer[recvlen] = '\0';if (strstr(buffer, "quit") != NULL){char re[] = "quit success!\n";send(client, re, strlen(re) + 1, 0);break;}int sendlen = send(client, "ok\n", 4, 0); //参数分析,第三个参数设置三个字节,第四个参数flag和操作系统有关,这里先写为0printf("recv %s\n", buffer);}closesocket(client);}int client = 0;
};int main(int argc,char *argv[])
{
#ifdef WIN32WSADATA ws;WSAStartup(MAKEWORD(2,2),&ws); //相当于加载了动态库,给引用增加1,这个只需要调用以此,但是需要调用在最前面
#endif/*for (int i = 0; i < 1000; i++){int sock = socket(AF_INET, SOCK_STREAM, 0); //tcp协议,这样就创建了一个socket,返回值是int类型if (sock == -1){printf("create socket failed\n");return -1; //什么时候会失败,资源耗尽的时候,linux与文件的句柄数量有关}printf("[%d]", sock); //打印结果就是句柄的 id号closesocket(sock);}*/int sock = socket(AF_INET, SOCK_STREAM, 0);if (sock == -1){printf("create socket failed!\n");return -1;}unsigned short port = 8082;if (argc > 1){port = atoi(argv[1]);}//创建sockaddr_in saddr;saddr.sin_family = AF_INET; //协议saddr.sin_port = htons(port); //本地字节序转换为网络字节序saddr.sin_addr.s_addr = htonl(0); //任意ip地址发过来的数据都接收//绑定//用bind绑定,绑定哪一个端口if (::bind(sock, (sockaddr*)&saddr, sizeof(saddr)) != 0){printf("bind port %d failed!\n",port);return -2;}printf("bind port %d success!\n", port);listen(sock, 10); //这个函数已经调用,就会告诉系统,这个socket可以通过这//个端口来跟它进行接收连接了//但是,连接的信息还会用到另外一个函数。10指的是在我这次获取连接信息的时候//最大支持多少个连接信息for (;;){sockaddr_in caddr;socklen_t len = sizeof(caddr);int client = accept(sock, (sockaddr*)&caddr, &len);//创建一个新的socket,用来与客户端单独进行通信if (client <= 0)break;printf("accept client %d\n", client);char* ip = inet_ntoa(caddr.sin_addr);unsigned short cport = ntohs(caddr.sin_port); //将网络字节序转化为本地字节序printf("client ip is %s,port is %d\n", ip, cport);TcpThread *th = new TcpThread; //需要考虑什么时候清理这个线程对象th->client = client;thread sth(&TcpThread::Main,th); //第二个参数是对象,第一个参数是对象的方法sth.detach(); //表示释放主线程拥有的子线程的资源} //来支持多个客户端closesocket(sock);getchar();return 0;
}
分析windows中没有socket_t这个变量类型我们只需用替换即可。
::bind指的是全局的bind接口,windows中老版本std中也有bind接口,我们using namespace std的时候,会导致接口重命名。加上::表示全局bind接口,避免重复定义。
C++socket编程(三):3.9 TCPServer移植到windows中相关推荐
- Socket编程(三)---仿QQ多人聊天实例
从上篇文章我们实现了一个简单的socket实例.实例的功能为当一个客户端连接服务端的时候,服务端打印客户端的连接信息,并向客户端发送一组数据并在服务端接收数据和打印,数据内容为服务器当前时间. 这次的 ...
- 华中科技大学计算机通信与网络实验,华中科技大学计算机通信与网络实验报告Socket编程实验.docx...
实验一 Socket编程实验 1.1环境 开发环境:Windows 10 64 位,Intel Core i5-7300HQ CPU, 8GB 内存 1.1. 1开发平台 Microsoft Visu ...
- 最基本的Socket编程 C#版
说明:此示例在.net2005\xp下运行通过 示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息:这里只是一个简单的示例,是一个最基本的socket编程流 ...
- C#版 Socket编程(同步)
今天就照着示例做一个简单的Socket通信(同步) 之前学习照着春神的视频做了一个聊天室,但做项目的时候用途不是很大,所以再来学习一下Socket,完成对从项目中的应用,示例按照别人的来,网址:htt ...
- Java——网络编程三要素
* A:计算机网络* 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统.网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统.* ...
- 通过Socket编程理解TCP三次握手
Socket编程--应用层开发 由于传输层以下都是属于操作系统内部的服务(内部的网络管理模块) Socket就是其提供的窗口,如果你想利用系统网络管理中的传输层.网络层.链路层服务你都需要通过Sock ...
- IP地址的三种表示格式及在Socket编程中的应用
转自:http://blog.csdn.net/hguisu/article/details/7449955 使用TCP/IP协议进行网络应用开发的朋友首先要面对的就是对IP地址信息的处理.IP地址其 ...
- socket 编程入门教程(三)TCP原理:5、TCP的三次握手(three-way handshake)
socket 编程入门教程(三)TCP原理:5.TCP的三次握手(three-way handshake) 前面3个小节介绍了socket机制对TCP协议三次握手的实现,需要强调的是,与协议独立于实现 ...
- IP地址的三种表示格式 及 在Socket编程中的应用
关于windows中的INADDR_ANY这个宏 头文件winsock.h中定义#define INADDR_ANY (u_long)0x00000000 它是用于多IP机器 ...
最新文章
- java基础之【堆、栈、方法区】结构图
- 密码的复杂化#个人隐私保护系列#
- java项目启动时登录,Java项目启动时报错解决方法
- python json unicode_python2下解决json的unicode编码问题
- 求幂级数展开的部分和 (20 分)新鲜出炉!!!
- composer使用慢的解决办法
- 基于JAVA+SpringMVC+Mybatis+MYSQL的网上零食销售系统
- Mac 移动端http、https抓包之Charles
- EasyUI美化界面项目系统(整合EasyUI_Insdep皮肤)
- DOTween 数字变化
- UI设计流程是什么?来看看UI设计完整的设计流程吧
- 天下会 - Google系列之谷歌搜索引擎高级用法:使用搜索语法精确搜索
- Ring of Elysium 游戏汉化
- 活动回顾|Derek做客Staking Mondays
- html 调试502谷歌浏览器,谷歌浏览器打不开网页提示Server Error 502 Bad Gateway怎么修复?...
- Python语言程序设计笔记(全)
- webuploader上传图片插件案例
- 【STARK论文翻译阅读】
- 【在华为做OD的日子】初出茅庐
- counter-reset