一,服务器端
1,声明3大对象
StreamReader sr;//实现一个 TextReader,使其以一种特定的编码从字节流
中读取字符。
StreamWriter sw;//实现一个 TextWriter,使其以一种特定的编码向流中写入
字符。
NetworkStream NS;//提供用于网络访问的基础数据流;
NS作为一个基础数据流为客户端和服务器端提供网络数据交流
2,声明进程对象,用来接收启动方法;
3,定义启动方法也就是【监视】
4,【监视】:声明TcpListener对象用来指明要监视服务器的IP,和该服务器
的端口范围【服务器端口可以有多个,只要客户端的端口属于服务器的端口就可
以连到服务器,当然IP也是要对的】
TcpListener tl = new TcpListener(IPAddress.Parse(IP_TB.Text), int.Parse
(Point_TB.Text));//端口是本地端口???
tl.Start();
5,【监视】:声明客户端 TcpClient tc = tl.AcceptTcpClient();由服务器来接
收客户端(为TCP网络服务提供客户端连接)
,获取客户端数据流传给媒介NS;
,读写对象sr,sw,与NS关联 :
sr = new StreamReader(NS);//把NS中的数据返回给sr或者说是sr读取了NS中
的数据为49行做铺垫;
sw = new StreamWriter(NS);
,关联完之后就该判断客户端是否说话了用一个while循环一直来判断客户
端是否说话{当然基本的异常处理是必须的}
try
{
while (true)
{
string con = sr.ReadLine();//承接43行;
if (con.Trim() != "")
{
Old_TB.Text += DateTime.Now.ToString() + "\r\n";
Old_TB.Text += "客户端说:" + con + "\r\n";
}
}
}
catch (Exception e)
{
Old_TB.Text = e.Message;
tc.Close();
}
,接下来处理服务器端响应客户端发送的信息【回信】
sw = new StreamWriter(NS);
sw.WriteLine(New_TB.Text);
sw.Flush();//清除当前编写器的所有缓冲区并使所有缓冲数据写入基础数
据流;
××.Text += DateTime.Now.ToString() + "\r\n";
××.Text += ××.Text + "\r\n";
二,客户端【跟服务器端差不多,这里只给出代码】
namespace TcpClient2//客户端
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
private void button1_Click(object sender, EventArgs e)
{
Thread ClientTh = new Thread(ClientCon);
ClientTh.Start();
}
StreamReader sr;
StreamWriter sw;
NetworkStream NS;
void ClientCon()
{
TcpClient tc = new TcpClient(IP_TB.Text, int.Parse
(Point_TB.Text));//找到服务器的IP
NS = tc.GetStream();
sr = new StreamReader(NS);
sw = new StreamWriter(NS);
try
{
while (true)//相当于客户端和服务器都在不停的读NS中的内容有的话
也就是对方发内容到NS的话就用43行读下来(自己发内容到NS体现在62行)
{
string con = sr.ReadLine();
if (con.Trim() != "")
{
××.Text += DateTime.Now.ToString() + "\r\n";
××.Text += "服务端说:" + con + "\r\n";
}
}
}
catch(Exception e)
{
×××.Text = e.Message;
tc.Close();
}
}
private void button2_Click(object sender, EventArgs e)
{
sw = new StreamWriter(NS);
sw.WriteLine(×××.Text);
sw.Flush();
××× += DateTime.Now.ToString() + "\r\n";
×××Text += ×××.Text + "\r\n";
×××.Clear();
}
private void Form1_FormClosed(object sender,
FormClosedEventArgs e)
{
Environment.Exit(0);
}
}
}