为了将本地游戏实现多人登录和对战,采用了C/S (客户端 / 服务器)模式
但是问题来了,没学过啊!!!!!!!
所以在网上找了篇博文,写的简练而且很易懂,所以偷偷拿来给大家分享一下哈~
是转载!!!!!
其实原作者也是转载,这个是国外翻译之作,
原网址:http://www.cnblogs.com/L-hq815/archive/2012/07/09/2583043.html
提一个小建议,再学习的时候结合下面的代码理解起来会更容易
简单总结一下客户端和服务端的模式吧 (小声bb)
代码也是转载
服务器端
#include <WinSock2.h>
#include <stdio.h>
#pragma comment(lib,"WS2_32.lib")
void main()
{
WSADATA wsd;
SOCKET server; //服务器socket
SOCKADDR_IN addrSrv;
char sendBuf[100];
char recvBuf[100];
SOCKADDR_IN addrClient;
SOCKET client; //连接的客户端socket
int len;
if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)
{
printf("start up failed!\n");
return;
}
server = socket(AF_INET, SOCK_STREAM, 0); //创建socket
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //设置地址
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000); //设置端口号
bind(server, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); //绑定
listen(server, 5); //设置最多连接数
len = sizeof(SOCKADDR);
while (1)
{
client = accept(server, (SOCKADDR*)&addrClient, &len); //接收客户端连接
send(client, "123徐海涛hunk xu", strlen(sendBuf) + 1, 0); //发送信息客户端
recv(client, recvBuf, 100, 0); //接收客户端数据
printf("%s\n", recvBuf);
closesocket(client);
}
closesocket(client); //关闭连接
WSACleanup();
}
客户端
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"WS2_32.lib")
void main()
{
WSADATA wsd;
SOCKET sockClient; //客户端socket
SOCKADDR_IN addrSrv;
char recvBuf[100];
if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)
{
printf("start up failed!\n");
return;
}
sockClient = socket(AF_INET, SOCK_STREAM, 0); //创建socket
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000);
connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); //连接服务器端
recv(sockClient, recvBuf, 100, 0); //接收服务器端数据
send(sockClient, "hello world", strlen("hello world") + 1, 0); //向服务器端发送数据
closesocket(sockClient); //关闭连接
WSACleanup();
printf(recvBuf);
system("pause");
}
啥也不说了 肝代码去了。。。。。
为实现本地游戏多人登录和对战,采用C/S(客户端/服务器)模式。作者分享了转载的相关博文及代码,包含服务器端和客户端代码示例,还建议学习时结合代码理解,最后表示要继续编写代码。
1万+

被折叠的 条评论
为什么被折叠?



