windows C++ socket server
创始人
2025-05-31 01:44:08
0

* SocketDemo.cpp

/*****************************************************************************************************************************
*1、加载套接字库,创建套接字(WSAStartup() / socket());
*2、绑定套接字到一个IP地址和一个端口上(bind());
*3、将套接字设置为监听模式等待连接请求;
* 4、请求到来之后,接受连接请求,返回一个新的对应于此次连接的套接字(accept());
*5、用返回的套接字和客户端进行通信(send() / recv());
*6、返回,等待另一个连接请求
* 7、关闭套接字,关闭加载的套接字库(closesocket() / WSACleanup());
*****************************************************************************************************************************/
#include 
#include 
#include 
using namespace std;
#pragma comment(lib,"ws2_32.lib")void reverse(char* p, char* q) {if (p > q) { swap(p, q); }char t = NULL;for (; p < q; p++, q--) {t = *p;*p = *q;*q = t;}
}void ntoa(char *addr, ULONG ip) {UINT8 a, b, c, d;char* p = addr, * q = NULL;d = ip >> 24;c = (ip & 0x00ffffff) >> 16;b = (ip & 0x0000ffff) >> 8;a = (ip & 0x000000ff);q = p;do {*p = a % 10 + 48;a /= 10;p++;} while (a > 0);reverse(q, p - 1);*p++ = '.';q = p;do {*p = b % 10 + 48;b /= 10;p++;} while (b > 0);reverse(q, p - 1);*p++ = '.';q = p;do {*p = c % 10 + 48;c /= 10;p++;} while (c > 0);reverse(q, p - 1);*p++ = '.';q = p;do {*p = d % 10 + 48;d /= 10;p++;} while (d > 0);reverse(q, p - 1);*p = '\0';
}int main()
{//初始化WSAWORD sockVersion = MAKEWORD(2, 2);WSADATA wsaData;//WSADATA结构体变量的地址值const int port = 8090;//int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);//成功时会返回0,失败时返回非零的错误代码值if (WSAStartup(sockVersion, &wsaData) != 0){cout << "WSAStartup() error!" << endl;return 0;}//创建套接字SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (slisten == INVALID_SOCKET){cout << "socket error !" << endl;return 0;}//绑定IP和端口sockaddr_in sin;//ipv4的指定方法是使用struct sockaddr_in类型的变量sin.sin_family = AF_INET;sin.sin_port = htons(port);//设置端口。htons将主机的unsigned short int转换为网络字节顺序sin.sin_addr.S_un.S_addr = INADDR_ANY;//IP地址设置成INADDR_ANY,让系统自动获取本机的IP地址//bind函数把一个地址族中的特定地址赋给scket。if (bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR){cout << "bind error !" << WSAGetLastError() << endl;}//开始监听if (listen(slisten, SOMAXCONN) == SOCKET_ERROR){cout << "listen error !" << endl;return -1;}//循环接收数据SOCKET sclient;sockaddr_in remoteAddr;//sockaddr_in常用于socket定义和赋值,sockaddr用于函数参数int nAddrlen = sizeof(remoteAddr);char revData[255];char addr[16];while (true){cout << "等待连接... 0.0.0.0:" << port << endl;sclient = accept(slisten, (sockaddr*)&remoteAddr, &nAddrlen);if (sclient == INVALID_SOCKET){cout << "accept error !" << endl;continue;}// inet_ntop(AF_INET, (sockaddr*)&remoteAddr, ipAddr, 16);ntoa(addr, remoteAddr.sin_addr.s_addr);cout << "接收到一个连接:" << addr << endl;// 接收数据int ret = recv(sclient, revData, 255, 0);if (ret > 0 && ret < 255){revData[ret] = 0x00;cout << revData << endl;}// 发送数据const char* sendData = "你好,TCP客户端!\n";send(sclient, sendData, (int)strlen(sendData), 0);closesocket(sclient);}closesocket(slisten);WSACleanup();system("pause");//return 0;
}// Tips for Getting Started: 
//   1. Use the Solution Explorer window to add/manage files
//   2. Use the Team Explorer window to connect to source control
//   3. Use the Output window to see build output and other messages
//   4. Use the Error List window to view errors
//   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
//   6. In the future, to open this project again, go to File > Open > Project and select the .sln file

telnet连接测试:

手机、电脑连同一个wifi,代理设置成电脑的ip

无线局域网适配器 WLAN:

   连接特定的 DNS 后缀 . . . . . . . :
   IPv6 地址 . . . . . . . . . . . . : 240e:878:d5:b560:550b:562c:730d:9764
   临时 IPv6 地址. . . . . . . . . . : 240e:878:d5:b560:14d2:fbfb:711e:3b39
   本地链接 IPv6 地址. . . . . . . . : fe80::a184:41cd:9359:4468%22
   IPv4 地址 . . . . . . . . . . . . : 192.168.1.100
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : fe80::1234%22
                                       192.168.1.1

 服务端接收到的数据:

等待连接... 0.0.0.0:8090
接收到一个连接:192.168.1.102
CONNECT dict.youdao.com:443 HTTP/1.1
Host: dict.youdao.com
Proxy-Connection: keep-alive
Connection: keep-alive

相关内容

热门资讯

形容冬天来临的诗句 形容冬天来临的诗句  导语:冬天是美丽的,也是寒冷的,那么关于形容冬天来临的诗句都有哪些呢?下面由小...
《将进酒》 《将进酒》 李白 唐代 李白 君不见,黄河之水天上来,奔流到海不复回。君不见,高堂明镜悲白发...
《曲龙山歌》 《曲龙山歌》 顾况 唐代 顾况 曲龙丈人冠藕花,其颜色映光明砂。玉绳金枝有通籍,五岳三山如一...
《赠王道士》 《赠王道士》 于邺 唐代 于邺 日日市朝路,何时无苦辛。不随丹灶客,终作白头人。浮世度千载,...
《北风行》 《北风行》 释文珦 宋代 释文珦 北风凛凛生祁寒,阴云万里何{上雨下漫}{上雨下漫},群木尽...
《观山》 《观山》 方岳 宋代 方岳 一层云放一层山,小市人家翠欲环。检点只疑低数尺,一层山向隐云间。...
《海月岩》 《海月岩》 戴应魁 宋代 戴应魁 谁把巉岩巧凿开,分明幻出小蓬莱。风迎蜃气楼台起,浪涌蟾光宫...
《杨柳青》 《杨柳青》 吴承恩 明代 吴承恩 村旗夸酒莲花白,津鼓开帆杨柳青。壮岁惊心频客路,故乡回首几...
《玉虚洞》 《玉虚洞》 孙应时 宋代 孙应时 驾言玉虚游,奇绝慰心赏。馀雪明层阴,初旭上清朗。寒溪玻璃色...
《湘夫人》 《湘夫人》 李颀 唐代 李颀 九嶷日已暮,三湘云复愁。窅霭罗袂色,潺湲江水流。佳期来北渚,捐...
《山茶》 《山茶》 苏轼 宋代 苏轼 游蜂掠尽粉丝黄,落蕊犹收蜜露香。待得春风几枝在,年来杀菽有飞霜。...
《霜天晓角》 《霜天晓角》 林逋 宋代 林逋 冰清霜洁。昨夜梅花发。甚处玉龙三弄,声摇动、枝头月。梦绝。金...
《击鼓》 《击鼓》 佚名 先秦 佚名 击鼓其镗,踊跃用兵。土国城漕,我独南行。从孙子仲,平陈与宋。不我...
《题齐安城楼》 《题齐安城楼》 杜牧 唐代 杜牧 呜轧江楼角一声,微阳潋潋落寒汀。不用凭栏苦回首,故乡七十五...
《望月婆罗门引 偕王仁甫左丞... 《望月婆罗门引 偕王仁甫左丞、贾伯坚左司,》 许有壬 元代 许有壬 酌。廷秀求词,醉中赋此紫...
《偶游》 《偶游》 温庭筠 唐代 温庭筠 曲巷斜临一水间,小门终日不开关。红珠斗帐樱桃熟,金尾屏风孔雀...
《不显名大檀越请偈》 《不显名大檀越请偈》 释慧远 宋代 释慧远 单提直指若为参,贝叶灵文满宝函。无我无人无寿者,...
《赠茂伯王孙》 《赠茂伯王孙》 程可中 明代 程可中 云孙几叶忆高皇,社土千秋表旧疆。周礼未应俱在鲁,汉臣今...
《灰洞》 《灰洞》 范成大 宋代 范成大 塞北风沙涨帽檐,路经灰洞十分添。据鞍莫问尘多少,马耳冥蒙不见...
《白石山》 《白石山》 叶原贺 宋代 叶原贺 云梯连石磴,香树锁松关。林壑疑无路,神仙别有山。 《白石山...