Socket编程,简单实现一台机器向另一台机器发消息

本文通过一个简单的示例介绍了如何使用Socket编程实现在两台机器之间进行消息传递。在五子棋对战场景中,两个客户端通过服务端进行通信,发送各自的操作,如下棋位置等,以模拟在同一棋盘上的对弈。服务端的角色是接收并转发客户端的消息。为了建立连接,客户端和服务端需要相同的IP地址和端口。文章鼓励读者阅读更多关于Socket和TCP协议的资料,并提供了一些学习资源。
摘要由CSDN通过智能技术生成

网上一搜,就可以看到一大堆的Socket编程介绍,一般是写个简单的服务端和客户端进行连接并做简单的交互。我这里又要多一篇这样的文章了,并不是故意的,而是有意的:D.当然不是直接复制粘贴,而是学习了解后亲自实践下来体会体会。

之前做了个五子棋,要可以两个人对战的。如果是单机的话,两个人对战或人机对战,都是在一个客户端上进行的,你只需要考虑在一个客户端上的情况就行了。如果你写了一个客户端,同时安装在两台机器上,并要可以对战交流,那要怎么办?你这边的操作,对面是看不到的,就像两个隔很远的人,没有通讯工具怎么交流。因此这两个客户端也需要一个”通讯工具”,那就是服务端。有了通讯工具,如果两人的语言不一样,也是无法交流的,因此两个客户端之间要用一种双方都懂的规范才能交流,这种规范叫协议,如常见的TCP协议。当然,这两个客户端要能联网,否则怎么连上服务端。服务端负责监听客户端,接收客户端发来的消息,然后给客户端发送消息。举个栗子:例如我这边下子了,然后我给服务端发送一条消息说-我下子了,棋子的颜色是黑色,位置是(x, y),然后服务端接收到消息后就给另一个客户端发条消息说,他下子了,然后另一个客户端就根据提供的消息,在自己棋盘上相应的位置下个黑子。反过来也一样,对方下子,我也会收到消息。这样,两个客户端间就像在同一个棋盘下子一样。服务端并不只是收发消息,像那些网游服务端,还要处理很多逻辑。当然,我做的五子棋并没有服务端,也没有用到Socket编程和什么TCP协议,我只是处理好前端逻辑,然后给别人接上对方提供的SDK,前端可以给那边发消息或接收消息。举的这个栗子不太恰当,不过应该可以帮助理解。

至于什么是Socket,什么是TCP,我这里就不讲了,别人写的很详细,我无法写得更详细,而且这个好像讲一下是讲不完的,我们先简单知道下就可以了。可以看看这篇文章socket编程之实现一个简单的TCP通信。如果你觉得这篇也不详细,那就再看看其它的。或者里边还有不懂的,你可以搜索一下,比如浅谈TCP协议的端口(port),再比如socket开发中INADDR_ANY”的含义是什么?。我觉得看完这3篇就差不多了,可以自己实现代码体验一下。

两台联网的机器如何通信?其实只要用Socket写个简单的服务端和一个简单的客户端分别运行就行了。当然,服务端和客户端的IP地址和端口得一样,不然它们是无法连接上的。

下面来看下代码:

wtlServer.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>

// 端口,任意指定
#define PORT 9990 
// 有多块网卡就会有多个IP地址,可填 (INADDR_ANY) 或填你电脑这在使用的IP地址,格式为 ("xx.xx.xx.xx")
#define IP (INADDR_ANY)
// 用来储存接收消息的缓冲区的大小
#define BUF_SIZE 1024

// 消息处理函数
typedef int(*fn)(int);
// 接收消息的缓冲区
static unsigned char gMsg[BUF_SIZE];

int wtlServer_Init(int* ipSockfd);
void wtl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值