关于socket通信的基本原理和方法在c#学习记录(46)中已经介绍了。下面将大多数书本上都会用到的例子来介绍一下:
一.服务器端:
private TcpListener objTcpListener;//定义一个TCP查询对象
private NetworkStream objNetworkStream;//网络数据流对象
private StreamReader objStreamReader;///流读取器
private StreamWriter objStreamWriter;//流写入器
private Socket objSocketforClient;//套接字对象
启动服务器方法:
try
{
///IP地址
IPAddress ipstring = IPAddress.Parse("127.0.0.1");
objTcpListener = new TcpListener(ipstring,8888);
objTcpListener.Start();//开始侦听
MessageBox.Show("服务器已经启动了!");
objSocketforClient = objTcpListener.AcceptSocket();//接受挂起的请求
objNetworkStream = new NetworkStream(objSocketforClient);
objStreamReader = new StreamReader(objNetworkStream);
objStreamWriter = new StreamWriter(objNetworkStream);
if (objSocketforClient.Connected)
{
MessageBox.Show("客户端已经链接上了!");
}
}
catch(Exception ex)
{
MessageBox.Show("服务器发生异常!原因是:" + ex.ToString());
}
开始接收数据流方法:
private void btnReceive_Click(object sender, EventArgs e)
{
if (objSocketforClient.Connected)//检查套接字是否连接成功
{
if (richTextMain.Text.Trim() != " ")
{
richTextMain.Text += "\n";
}
richTextMain.Text += "客户端说:" + objStreamReader.ReadLine();
}
}
发送数据方法:
private void btnSend_Click(object sender, EventArgs e)
{
string strsend = textBoxServer.Text.Trim();
if (strsend == "")
{
MessageBox.Show("不能发送空消息");
textBoxServer.Focus();
return;
}
try
{
objStreamWriter.WriteLine(strsend);///将数据写入到流写入器中
objStreamWriter.Flush();//刷新数据流
if (richTextMain.Text.Trim() != "")//如果不为空,则换行
{
richTextMain.Text += "\n";
}
richTextMain.Text += "服务器说:" + strsend;///显示发送的数据
}
catch (Exception ex)
{
MessageBox.Show("发送失败!原因是:" + ex.ToString());
}
}
二.服务器端
1.定义变量:
private TcpClient objTcpClient;
private NetworkStream objNetworkStream;
private StreamReader objStreamReader;
private StreamWriter objStreamWriter;
2.连接服务器
private void btnConnected_Click(object sender, EventArgs e)
{
try
{
objTcpClient = new TcpClient("127.0.0.1",8888);
MessageBox.Show("连接成功!");
}
catch
{
MessageBox.Show("连接失败!");
return;
}
objNetworkStream = objTcpClient.GetStream();
objStreamReader = new StreamReader(objNetworkStream);
objStreamWriter = new StreamWriter(objNetworkStream);
}
3.接收消息
4.发送消息
注意:关于发送消息和接收消息的方法,服务器端和客户端一样。要注意代码的移植,对于功能近似的代码尽量提高其移植率,减少低效的工作。这个需要做一个工作,那就是对于自己工作平时经常要用到的模板要制作完善,然后在开发程序的时候,对于合适的功能模块可以快速移植。将工作的注意力放在问题的分析和解决上面。