客户端程序代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
}
}
}