如下代码:

#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中相关推荐

  1. Socket编程(三)---仿QQ多人聊天实例

    从上篇文章我们实现了一个简单的socket实例.实例的功能为当一个客户端连接服务端的时候,服务端打印客户端的连接信息,并向客户端发送一组数据并在服务端接收数据和打印,数据内容为服务器当前时间. 这次的 ...

  2. 华中科技大学计算机通信与网络实验,华中科技大学计算机通信与网络实验报告Socket编程实验.docx...

    实验一 Socket编程实验 1.1环境 开发环境:Windows 10 64 位,Intel Core i5-7300HQ CPU, 8GB 内存 1.1. 1开发平台 Microsoft Visu ...

  3. 最基本的Socket编程 C#版

    说明:此示例在.net2005\xp下运行通过 示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息:这里只是一个简单的示例,是一个最基本的socket编程流 ...

  4. C#版 Socket编程(同步)

    今天就照着示例做一个简单的Socket通信(同步) 之前学习照着春神的视频做了一个聊天室,但做项目的时候用途不是很大,所以再来学习一下Socket,完成对从项目中的应用,示例按照别人的来,网址:htt ...

  5. Java——网络编程三要素

    * A:计算机网络* 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统.网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统.* ...

  6. 通过Socket编程理解TCP三次握手

    Socket编程--应用层开发 由于传输层以下都是属于操作系统内部的服务(内部的网络管理模块) Socket就是其提供的窗口,如果你想利用系统网络管理中的传输层.网络层.链路层服务你都需要通过Sock ...

  7. IP地址的三种表示格式及在Socket编程中的应用

    转自:http://blog.csdn.net/hguisu/article/details/7449955 使用TCP/IP协议进行网络应用开发的朋友首先要面对的就是对IP地址信息的处理.IP地址其 ...

  8. socket 编程入门教程(三)TCP原理:5、TCP的三次握手(three-way handshake)

    socket 编程入门教程(三)TCP原理:5.TCP的三次握手(three-way handshake) 前面3个小节介绍了socket机制对TCP协议三次握手的实现,需要强调的是,与协议独立于实现 ...

  9. IP地址的三种表示格式 及 在Socket编程中的应用

    关于windows中的INADDR_ANY这个宏 头文件winsock.h中定义#define INADDR_ANY              (u_long)0x00000000 它是用于多IP机器 ...

最新文章

  1. java基础之【堆、栈、方法区】结构图
  2. 密码的复杂化#个人隐私保护系列#
  3. java项目启动时登录,Java项目启动时报错解决方法
  4. python json unicode_python2下解决json的unicode编码问题
  5. 求幂级数展开的部分和 (20 分)新鲜出炉!!!
  6. composer使用慢的解决办法
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的网上零食销售系统
  8. Mac 移动端http、https抓包之Charles
  9. EasyUI美化界面项目系统(整合EasyUI_Insdep皮肤)
  10. DOTween 数字变化
  11. UI设计流程是什么?来看看UI设计完整的设计流程吧
  12. 天下会 - Google系列之谷歌搜索引擎高级用法:使用搜索语法精确搜索
  13. Ring of Elysium 游戏汉化
  14. 活动回顾|Derek做客Staking Mondays
  15. html 调试502谷歌浏览器,谷歌浏览器打不开网页提示Server Error 502 Bad Gateway怎么修复?...
  16. Python语言程序设计笔记(全)
  17. webuploader上传图片插件案例
  18. 【STARK论文翻译阅读】
  19. 【在华为做OD的日子】初出茅庐
  20. counter-reset

热门文章

  1. oracle监听的动态注册和静态注册
  2. python 数据结构与算法
  3. 在线word转html
  4. SpringMVC学习笔记七:SpringMVC的数据验证
  5. 20150702 问题随记
  6. IE7下position:relative的问题
  7. java如何解析word大纲_java解析word文件
  8. 计算机网络基础+重点知识点
  9. android代码重启设备,Android设备重启(reboot)---Android studio
  10. Python使用标准库urllib模拟浏览器爬取网页内容