搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
Gausst松鼠会
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
启英泰伦离线自然说:让语音交互更“顺口”
2
基于Android studio校园信息查询系统_安卓按学生院系查询
3
pygame 图像--键盘上下左右
4
Unity3d C# 实现滑动条(Slider)的拖拽开始和结束、点击等事件的拓展功能(含源码)_u3d slider点击拖拽弹出提示
5
Element Plus 实例详解(一)___安装设置_element-plus
6
ChatGPT在数据分析学习阶段的应用
7
ParadigmCTF_2022_MarkleDrop_ctf merkle tree
8
PointNet:利用深度学习对点云进行3D分类和语义分割_pointnet可以使用semantic3d数据集嘛
9
【服务器Midjourney】创建部署Midjourney网站_midjourney 云服务器搭建
10
Python turtle绘制——壬寅(虎)年祝福_用海龟画图制作一张新年贺卡
当前位置:
article
> 正文
windows API(TCP/IP)通讯编程_window api tcp通讯
作者:Gausst松鼠会 | 2024-02-26 20:54:14
赞
踩
window api tcp通讯
server端程序:
#include
<
winsock
2
.h
>
#include
<
stdio.h
>
#include
<
stdlib.h
>
#include
<
windows.h
>
#include
<
process.h
>
#pragma comment(lib,
"Ws2_32"
)#define
DEFAULT
_PORT
5150
#define
DEFAULT
_BUFFER
4096
int iPort
=
DEFAULT
_PORT;BOOL bInterface
=
FALSE
,bRecvOnly
=
FALSE
;char szAddress[
128
];void
usage
(){ printf(
"usage:server[-p:x] [-i:IP] [-o]/n/n"
); printf(
" -p:x Port number to listen on/n"
); printf(
" -i:str Interface to listen on/n"
); printf(
" -o Don't echo the data back/n/n"
); ExitProcess(
1
);}void ValidateArgs(int argc,char
**
argv){ int i;
for
(i
=
1
;i
<
argc;i
+
+
) {
if
((argv[i][
0
]
=
=
'-'
)||(argv[i][
0
]
=
=
'/'
)) { switch(tolower(argv[i][
1
])) { case
'p'
: iPort
=
atoi(
&
argv[i][
3
]); break; case
'i'
: bInterface
=
TRUE
;
if
(strlen(argv[i])
>
3
) strcpy(szAddress,
&
argv[i][
3
]); break; case
'o'
: bRecvOnly
=
TRUE
; break;
default
:
usage
(); break; } } }}DWORD WINAPI ClientThread(LPVOID lpParam){ SOCKET sock
=
(SOCKET) lpParam; char szBuff[
DEFAULT
_BUFFER]; int ret,nLeft,idx; while(
1
) { ret
=
recv(sock,szBuff,
DEFAULT
_BUFFER,
0
);
if
(ret
=
=
0
) break;
else
if
(ret
=
=
SOCKET_
ERROR
) { printf(
"recv() failed:%d/n"
,WSAGetLastError()); break; } szBuff[ret]
=
'/0'
; printf(
"recv:'%s'/n"
,szBuff);
if
(!bRecvOnly) { nLeft
=
ret; idx
=
0
; while(nLeft
>
0
) { ret
=
send
(sock,
&
szBuff[idx],nLeft,
0
);
if
(ret
=
=
0
) break;
else
if
(ret
=
=
SOCKET_
ERROR
) { printf(
"send() failed:%d/n"
,WSAGetLastError()); break; } nLeft -
=
ret; idx
+
=
ret; } } }
return
0
;}int main(int argc,char
**
argv){ WSADATA wsd; SOCKET sListen,sClient; int iAddrSize; HANDLE hThread; DWORD dwThreadId; struct sockaddr_
in
local,client; ValidateArgs(argc,argv);
if
(WSAStartup(MAKEWORD(
2,2
),
&
wsd) !
=
0
) { printf(
"failed to load winsock!/n"
);
return
1
; } sListen
=
socket(AF_INET, SOCK_STREAM,IPPROTO_IP);
if
(sListen
=
=
SOCKET_
ERROR
) { printf(
"socket() failed:%d/n"
,WSAGetLastError());
return
1
; }
else
printf(
"socket() successful!/n"
);
if
(bInterface) { local.sin_addr.s_addr
=
inet_addr(szAddress);
if
(local.sin_addr.s_addr
=
=
INADDR_NONE)
usage
(); }
else
local.sin_addr.s_addr
=
htonl(INADDR_
ANY
); local.sin_family
=
AF_INET; local.sin_port
=
htons(iPort);
if
(bind(sListen,(struct sockaddr
*
)
&
local,sizeof(local))
=
=
SOCKET_
ERROR
) { printf(
"bind() failed:%d/n"
,WSAGetLastError());
return
1
; }
else
printf(
"bind() successful!/n"
); int listenState
=
listen(sListen,
8
); printf(
"%d/n"
,listenState); while(
1
) { iAddrSize
=
sizeof(client); sClient
=
accept
(sListen,(struct sockaddr
*
)
&
client,
&
iAddrSize);
if
(sClient
=
=
INVALID
_SOCKET) { printf(
"accept() failed:%d/n"
,WSAGetLastError()); break; } printf(
"Accept client:%s:%d/n"
,inet_ntoa(client.sin_addr),ntohs(client.sin_port)); hThread
=
::
CreateThread(
NULL
,
0
,ClientThread,(LPVOID)sClient,
0
,
&
dwThreadId);
if
(hThread
=
=
NULL
) { printf(
"creatThread() failed:%d/n"
,GetLastError()); break; } CloseHandle(hThread); } closesocket(sListen); WSACleanup();
return
0
;}
client端程序:
#include
<
winsock
2
.h
>
#include
<
stdio.h
>
#include
<
stdlib.h
>
#pragma comment(lib,
"Ws2_32"
)#define
DEFAULT
_
COUNT
20
#define
DEFAULT
_PORT
5150
#define
DEFAULT
_BUFFER
2048
#define
DEFAULT
_MESSAGE
"This is a test of the emergency broadcasting system"
char szServer[
128
],szMessage[
1024
];int iPort
=
DEFAULT
_PORT;DWORD dwCount
=
DEFAULT
_
COUNT
;BOOL bSendOnly
=
FALSE
;void
usage
(){ printf(
"usage:client [-p:x] [-i:IP] [-o]/n/n"
); printf(
" -p:x Remote port to send to/n"
); printf(
" -s:IP server's IP address or host name/n"
); printf(
" -n:x number of times to send message/n"
); printf(
" -o send message only; don't receive/n"
); ExitProcess(
1
);}void ValidateArgs(int argc,char
**
argv){ int i;
for
(i
=
1
;i
<
argc;i
+
+
) {
if
((argv[i][
0
]
=
=
'-'
)||(argv[i][
0
]
=
=
'/'
)) { switch(tolower(argv[i][
1
])) { case
'p'
:
if
(strlen(argv[i])
>
3
) iPort
=
atoi(
&
argv[i][
3
]); break; case
's'
:
if
(strlen(argv[i])
>
3
) strcpy(szServer,
&
argv[i][
3
]); break; case
'n'
:
if
(strlen(argv[i])
>
3
) dwCount
=
atol(
&
argv[
1
][
3
]); break; case
'o'
: bSendOnly
=
TRUE
; break;
default
:
usage
(); break; } } }}int main(int argc, char
**
argv){ WSADATA wsd; SOCKET sClient; char szBuffer[
DEFAULT
_BUFFER]; int ret,i; struct sockaddr_
in
server; struct hostent
*
host
=
NULL
; ValidateArgs(argc,argv);
if
(WSAStartup(MAKEWORD(
2,2
),
&
wsd)!
=
0
) { printf(
"failed to load winsock library!/n"
);
return
1
; } strcpy(szMessage,
DEFAULT
_MESSAGE); sClient
=
socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if
(sClient
=
=
INVALID
_SOCKET) { printf(
"socket() fialed: %d/n"
, WSAGetLastError());
return
1
; } server.sin_family
=
AF_INET; server.sin_port
=
htons(iPort); server.sin_addr.s_addr
=
inet_addr(
"192.168.0.105"
);
if
(server.sin_addr.s_addr
=
=
INADDR_NONE) { host
=
gethostbyname(szServer);
if
( host
=
=
NULL
) { printf(
"Unable to resolve server:%s/n"
,szServer);
return
1
; } CopyMemory(
&
server.sin_addr,host-
>
h_addr_list[
0
],host-
>
h_
length
); } int m
=
connect(sClient,(struct sockaddr
*
)
&
server,sizeof(server));
if
(m
=
=
SOCKET_
ERROR
) { int errorCode
=
WSAGetLastError(); printf(
"connect() fialed:%d/n"
,errorCode);
return
1
; }
for
(i
=
0
;i
<
dwCount; i
+
+
) { ret
=
send
(sClient,szMessage,strlen(szMessage),
0
);
if
(ret
=
=
0
) break;
else
if
(ret
=
=
SOCKET_
ERROR
) { printf(
"send() fialed:%d/n"
,WSAGetLastError()); break; } printf(
"send %d bytes/n"
,ret);
if
(!bSendOnly) { ret
=
recv(sClient,szBuffer,
DEFAULT
_BUFFER,
0
);
if
(ret
=
=
0
) break;
else
if
(ret
=
=
SOCKET_
ERROR
) { printf(
"recv() fialed:%d/n"
,WSAGetLastError()); break; } szBuffer[ret]
=
'/0'
; printf(
"recv[%d bytes]:'%S'=n"
,ret,szBuffer); } } closesocket(sClient); WSACleanup();
return
0
; }
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/147014
推荐阅读
article
0
7
Windows
7
AI工具-
爬虫
环境
配置
【看这一篇就够了!】(包含适用于
Windows
7
的A...
Windows
7
AI工具-
爬虫
环境
配置
_
python
anaconda
windows
7
python
anacon...
赞
踩
article
Spyder
与
Pycharm
配置
Anaconda
环境
Python
解释器(
Windows
...
在
Windows
7 系统中,安装并配置
Spyder
与
Pycharm
的
Anaconda
环境
Python
...
赞
踩
article
Anaconda
超详细教程2023/
7
/
10
(
windows
)_
anaconda
win
7
...
Anaconda
是一个强大的开源数据科学平台,它将很多好的工具整合在一起,极大地简化了使用者的工作流程,并能够帮助使用者...
赞
踩
article
【看了标题就行】
Anaconda3
避雷,
windows
7
装2021.05_
anaconda
win...
老电脑,离线的那种,今天想升级一下Anaconda,结果下了一个版本传过去都不行。后面一查,
windows
7
的锅。Py...
赞
踩
article
Anaconda
详细
安装
及
配置
教程(
Windows
)_
windows
anaconda
...
Anaconda
详细
安装
及
配置
教程(
Windows
)_
windows
anaconda
windows
anaconda
...
赞
踩
article
【
工具
配置】【
Windows
】
Anaconda
安装
教程
(
保姆级
)
...
1 基本介绍这里是百度百科介绍1.1 作用开源包管理
工具
,conda是其管理命令。开源环境管理器,用于管理
(
创建,修改,...
赞
踩
article
Windows
中安装和使用
Conda
_
windows
安装
conda
...
本文介绍了如何在
Windows
中安装和使用
Conda
。我们使用
Conda
创建和管理 Python 环境、安装和...
赞
踩
article
Windows
on
Arm平台浅尝
pytorch
-
directml
(
x64
)_
pytorch
o...
Lenovo ThinkPad X13s的Window 11 (
Windows
on
Arm)上,运行
x64
版本的Pyt...
赞
踩
article
Windows + pycharm +
jupyter
+
pytorch
安装
配置
_
jupyter
...
记录一下在
pytorch
学习中的一些问题,先从
安装
配置
开始,以防之后需要
配置
新
环境
时忘了。1.Anaconda
安装
Ana...
赞
踩
article
win10
下
anaconda
安装
tensorflow
,pycharm环境配置(gpu版)_tesn...
1、官网下载
pytho
n3.6+(我的版本
pytho
n-3.6.2-amd64.exe)----网址、官网下载anaco...
赞
踩
article
Unity3D
中制作一个
GUI
对话框
界面_
unity
ui
弹出消息框设置样式与g
ui
.
window
...
var icons : Texture2D[]; //存放要动态播放的图片,图片尺寸要求2的幂次方var timeEla...
赞
踩
article
Linux
内核中的通用链表
list
.
h
在
window
s下的移植实现_
list
.
h
window
...
转自:
h
ttps://blog.csdn.net/dijkstar/article/details/19249219我这...
赞
踩
article
如何在
Windows
上
恢复
已
删除
的
Excel
文件
...
许多公司和个人在
Excel
电子表格中保存有价值的信息。当会议需要某个重要的
Excel
文件
时,突然意识到您已
删除
或...
赞
踩
article
windows
cuda11
.x
cudnn8
.x
TensorRT8
.x 环境配置_
nvfuser
...
win10 CUDA11 cudnn TensorRT开发环境的搭建与测试cuda,cudnn和tensorrt安装cu...
赞
踩
article
【2024】
Windows
11
安装
WSL2
并搭建深度学习环境(
Docker
,Pytorch)_w...
Windows
11
下,在
WSL2
上搭建深度学习环境_
windows
11
安装
wsl2
windows
11
安装
wsl2
...
赞
踩
article
Windows
11/10 WSL2
Ubuntu
20.04 下配置Cuda及Pytorch_ws...
Windows
11/10 WSL2
Ubuntu
20.04 下配置Cuda及Pytorch_
wsl
ubuntu
n...
赞
踩
article
深度学习
GPU
环境
安装(Windows、
WSL
)_
wsl
能使用
windows
的
cuda
吗...
深度学习的库基本都基于CUDA,需要购买Nvidia芯片的显卡。有了
GPU
显卡,可以在
windows
环境
、Linux
环境
...
赞
踩
article
Windows
配置
WSL
CUDA
环境_在
windows10
上安装了
cuda
,
wsl
能直接用吗...
Windows
配置
WSL
CUDA
环境用于深度学习环境_在
windows10
上安装了
cuda
,
wsl
能直接用吗?在wi...
赞
踩
article
Jellyfin
Windows
密码
重置_
jellyfin
忘记
密码
...
windows版本
Jellyfin
密码
重置 pin码路径:_
jellyfin
忘记
密码
jellyfin
忘记
密码
...
赞
踩
article
Jenkins
忘记
密码
的
修复方法(
Windows
/
Linux
)...
在jenkins
的
安装目录下,找到config.xml配置文件,删除以下节点:
true[详细]
-->
赞
踩
相关标签
python
人工智能
爬虫
windows
Spyder
Pycharm
Anaconda
Python解释器
环境配置
conda
linux
anaconda
pytorch
深度学习
arm
tensorflow
gpu