本文主要通过图片和代码的方式,描述了PPC端与PC端的TCP通讯,你可以通过本文学习到配置模拟器与局域网互通,以及TCP相关技术。
在之前,我曾经写过一个PPC通过UDP和PC端进行通讯的简单例子,大家可以到这里查看,多的我就不说了,咱们直接进入主题。
本文意在介绍如何使用.net cf类库中的套接字类库,与桌面程序完成一个简单的TCP通讯,在此之前,你可能需要简单了解如下知识:
1、套接字
2、面向连接的套接字
这些知识点请大家自行查找,在这里我就不赘述了,只是强调这个很重要哦。
下面,我们来为程序写入代码,首先,定义客户端为PPC端,使用的环境为Wm5 for ppc模拟器,当然,在开始之前,请按照这篇文章对模拟器进行配置,以便进行之后的网络工作——『原创』+『转载』配置模拟器网络环境(访问局域网)Step by Step! 。
配置好以后,我们新建一个解决方案,其中包含了一个C#控制台应用程序(TCP-Server),以及一个C#的PPC普通程序项目(PPC-Client,WM5,.netcf 2.0)。
先看看客户端(PPC-client)的界面设计吧:
用一个ListBOx用于显示数据交换信息,底部两个功能按钮,就这么简单。
接着为客户端编写代码如下:
PPC-Client
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
namespace PPC_Client
{
public partial class PPCclient : Form
{
public PPCclient()
{
InitializeComponent();
}
Socket server;
IPAddress adr;
IPEndPoint ep;
byte[] buffer=new byte[1024];
int end;
private void PPCclient_Load(object sender, EventArgs e)
{
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);//为套接字制定属性
adr = IPAddress.Parse("192.168.1.29");//为套接字准备好远程服务器的IP
ep = new IPEndPoint(adr, 3000);//为套接字初始化EndPoint
}
private void menuItem1_Click(object sender, EventArgs e)
{
try
{
server.Connect(ep);//与远程终结点连接
if (server.Receive(buffer) > 0)//如果有数据
{
lbInfo.Items.Clear();
lbInfo.Items.Add("连接上");
lbInfo.Items.Add("从服务器获取数据");
while (buffer[end] != 0)
{
lbInfo.Items.Add(buffer[end].ToString());
end++;//增加偏移量
}
lbInfo.Items.Add("连接断开");
}
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
finally
{
server.Shutdown(SocketShutdown.Both);//关闭连接
server.Close();//关闭套接字
}
}
private void menuItem2_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
代码很简单,主要逻辑:1、程序初始化时,设置套接字的各个属性。2、点击连接服务器按钮,开始从服务器获取数据并添加到ListBox中,然后断开服务器
在准备好客户端后,我们要为服务器端编写简单的代码了,代码如下:
TCP-Server
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace TCP_Server
{
class Program
{
static void Main(string[] args)
{
Socket client, serverSocket;
IPAddress adr;
IPEndPoint ep;
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
adr =IPAddress.Parse("192.168.1.29");
ep = new IPEndPoint(adr, 3000);
serverSocket.Bind(ep);
serverSocket.Listen(3);
while (true)
{
//Console.WriteLine("等待联入");
if ((client = serverSocket.Accept()) != null)
{
Console.WriteLine("客户已连接,发送数据中");
byte[] msg = { 10, 20, 30, 40};//定义发送的数据
Console.WriteLine("总计将发送:" + client.Send(msg) + "个字节数");//同时将数据Send出去
Console.WriteLine("结束");
Console.ReadLine();
client.Close();
break;
}
}
}
}
}
代码基本同客户端,只是多了一个client套接字,他用于和客户端打交道,而serverSocket则是用于储存服务器自己的信息,并且把连接到服务器的客户端套接字传递给client的中间站。大致流程同客户端,相信大家已经明白。
之后,我们先启动WM5模拟器,也就是文中开头你配置的那个模拟器,先把PPC程序“部署”过去,然后设置解决方案中的服务器端(控制台程序)为启动项目,ok,运行一下吧。
1、服务器端启动,等待联入:
2、启动PPC客户端,点击“连接服务器”按钮后,进行数据交换,服务器则显示发送状态:
OK,到这里,一个简单的PPC到PC端的TCP通讯就完成了,当然,说简单,是因为这里很多东西没有考虑到,如:多客户端的链接,多线程的使用,以及异步操作处理等高级内容。我会找个时间,和大家一起探讨一下相关技术。今天就写到这里吧。
PS:今天全国降温,春城从春天一下被打回冬天~~~冷啊~~~