客户端程序代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C/S客户端程序

public partial class student : Form

{ // 定义类变量

private Thread serverThread;//定义服务器线程

private Thread recvThread;

private Thread sendThread;

private TcpClient my_tcpClient; //定义客户tcp对象

private NetworkStream networkstream; //定义网络流I/O对象

private StreamReader streamreader;

private StreamWriter streamwriter;

//请求连接方法

private void Connection() //定义客户端连接服务器函数

{

try

{

IPAddress ipaddress = IPAddress.Parse(text_ip.Text);

// 文本框内容赋予变量ipaddress

Int32 port = Int32.Parse(text_port.Text); //有效数据16位整数

my_tcpClient = new TcpClient(); //实例化请求连接对象

my_tcpClient.Connect(ipaddress,port);//连接远程主机(教师机)

//一般应根据对象的属性connected==true判断是否连接好listBox1.Items.Add("学生机成功连接上教师机!!");

button_send.Enabled = true;

button_stop.Enabled = true;

button_up.Enabled = false;

networkstream = my_tcpClient.GetStream();

streamreader = new StreamReader(networkstream);

streamwriter = new StreamWriter(networkstream);

recvThread = new Thread(new ThreadStart(RecvData));

//蓝字体是为RecvData函数定义委托recvThread.Start();

}

catch (Exception exc)

{ MessageBox.Show(exc.Message, "学生机提示!"); }

}

private void RecvData()//定义接收数据函数

{

string msg = streamreader.ReadLine(); //从当前流中读取一行字符并将数据作为字符串返回

while (!msg.Equals("exit")) // 如果接收到的教师机信息不是"exit",就不断接收信息{

listBox1.Items.Add("教师回答:" + msg);

msg = streamreader.ReadLine();

}

button_up.Enabled = true;

button_stop.Enabled = false;

button_send.Enabled = false;

listBox1.Items.Add("教师机关闭!");

ReleaseResource(); //释放资源和所使用的对象

}

private void Send_data()//定义发送数据函数(方法)

{

if (text_msg.Text != "")

{

listBox1.Items.Add("学生说:" + text_msg.Text);

streamwriter.WriteLine(text_msg.Text); //往当前的数据潮中写入一行字符串,发送数据。

streamwriter.Flush(); //刷新当前数据流中的数据

text_msg.Text = "";

}

else

{ MessageBox.Show("发送信息不能为空", "学生机提示"); }

}

private void ReleaseResource()// 定义释放资源函数(方法)

{

networkstream.Close();

streamwriter.Close();

streamreader.Close();

sendThread.Abort();

recvThread.Abort();

serverThread.Abort();

my_tcpClient.Close();

}

public student() //student的构造函数

{

InitializeComponent();

System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;

}

private void Form1_Load(object sender, EventArgs e)

{

button_send.Enabled = false;

button_stop.Enabled = false;

}

private void button_up_Click(object sender, EventArgs e) //启动与服务器建立连接函数{

serverThread = new Thread(new ThreadStart(Connection));

serverThread.Start();

}

private void button_stop_Click(object sender, EventArgs e) //释放与服务器建立的链路{ // 停止服务后,允许启动服务,但不允许发送信息

button_up.Enabled = true;

button_stop.Enabled = false;

button_send.Enabled = false;

string Exit_msg = "exit";

streamwriter.WriteLine(Exit_msg); //要退出时,发送exit信息给教师机

streamwriter.Flush();

listBox1.Items.Add("学生机关闭!");

my_tcpClient.Close();

ReleaseResource();

}

private void button_send_Click(object sender, EventArgs e) //启动发送

{

sendThread = new Thread(new ThreadStart(Send_data));

sendThread.Start();

}

private void student_FormClosing(object sender, FormClosingEventArgs e)

{ //在没有停止服务前,不允许关闭窗体

if (button_up.Enabled == false)

{

MessageBox.Show("请先停止服务,再退出!", "学生机提示");

e.Cancel = true;

}

}

}

相关文档
最新文档