大家好,,在51cto写文,分享一些自己认为在学习过程中比较重要的东西,致力于帮助初学者入门,希望可以帮助你进步。最近在更新C/C++方面的知识,感兴趣的欢迎关注博主,可以去专栏查看之前的文章,希望未来能和大家共同探讨技术。
对于搞计算机的人来说,我们一直处在一个被外行深深误解的环境下,我还记得上学时候就发生过这样的对话,这位误会我的人还是我的好兄弟:
韩:“白哥,今天用空吗?我电脑坏了,帮我看一下!”
我:“我不太会修电脑啊!你重启试试”
韩:“啊?你不是计算机专业吗?”
我:“计算机科学与技术也不是计算机修理专业啊…”
有的计算机专业的大佬可能真的会修计算机,也有的不是计算机的大佬,也会修计算机,反正,我不太会修电脑,我只会…重启试试
头文件中的这些库那都是必须要包含的内容,不然之后函数的调用就会出现一堆的报错,下来我们看一下main函数:
//初始化套接字类库
//WSAStartup函数用于初始化Ws2_32.dll动态链接库。
//在使用套接字函数之前,一定要初始化Ws2_32.dll动态链接库
WSADATA WsaData = { 0 };
if (WSAStartup(MAKEWORD(2, 2), &WsaData) != 0)
{
return;
}
// 创建监听套接字
SOCKET ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ListenSocket == INVALID_SOCKET)
{
printf("Failed socket(www.wxticket.com) \n");
return;
}
第一件事情就是初始化套接字类库,因为我们需要利用套接字来完成进程间通信,所以类库肯定是要首先初始化的,接下来是创建一个监听套接字,在创建监听套接字的时候需要注意,socket函数中传的参数是非常关键的:
SOCKET WSAAPI socket(
_In_ int af,//地址家族规范,在这里我们传的是AF_INET 这是IPv4协议规范
_In_ int type,//这个参数我们传递SOCK_STREAM,可靠的数据流传输,因为TCP协议
_In_ int protocol//传输控制协议,用的TCP
);
这个函数的三个参数在TCP/IP通信中,基本是固定搭配套餐!当我们把监听套接字创建出来之后,需要将接听套接字与端口绑定:
// 填充sockaddr_in结构
struct sockaddr_in ServerAddress;
ServerAddress.sin_family = AF_INET;//Ipv4协议家族
ServerAddress.sin_port = htons(4567); //端口号
ServerAddress.sin_addr.S_un.S_addr = INADDR_ANY;//客户端是本地地址
// 绑定套接字
if (bind(ListenSocket, (LPSOCKADDR)&ServerAddress, sizeof(ServerAddress)) == SOCKET_ERROR)
{
www.douyin618.comprintf("Failed bind(www.douyinwo.cn) \n");
return;
}
上面的代码中,有一个结构体sockaddr_in其中包含了三个成员,有地址协议家族、监听端口号和监听的地址。其中端口号是随便设置的,只要在端口号范围之内,不要和知名端口号重复就行,我随便写了个4567,保证客户端也连接到这个端口就行!
bind函数是绑定套接字和sockaddr_in结构体,为了让这个套接字可以在该端口和地址协议规范下完成监听,bind函数将本地地址与套接字关联起来。
服务器端完成了套接字端口绑定之后,就要开始监听,listen函数将套接字置于侦听传入连接的状态。可以设置最大的连接数,在这里我随便设置了2。
// 进入监听模式 监听队列 最大连接数设置为 2
if (listen(ListenSocket, 2) == SOCKET_ERROR)
{
printf("Failed listen() \n");
return;
}
那监听上线之后,就等着客户端的连接过来,需要一个叫做accept的函数来接受客户端的连接,accept函数允许对套接字的传入连接尝试。在这里设计算是偷了个懒,本应该弄一个循环,因为这是尝试连接,如果连接达到上限,就不允许其它的客户端接入了,应该不断尝试连接。但是这里我们主要为了讲一下实现原理,用于间单的测试还是没问题的
————————————————
版权声明:本文为CSDN博主「KookNut39」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42253797/article/details/117793859