欢迎来到天天文库
浏览记录
ID:18577707
大小:216.00 KB
页数:8页
时间:2018-09-19
《网络编程实验报告31074》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
实验名称:一个简单的客户/服务器程序实验目的:1、熟悉Eclipse编程环境。2、了解TCP与UDP协议,以及它们之间的区别。3、了解客户/服务器模型原理。4、熟悉Socket编程原理,掌握简单的套接字编程。实验环境:硬件:PC机(两台)、网卡、已经设定好的以太网环境软件:Eclipse编程语言:java实验内容:编写用TCP协议实现的Client端和Server端程序并调试通过。程序分两部分:客户程序和服务器程序。工作过程是:服务器首先启动,它创建套接字之后等待客户的连接;客户启动后创建套接字,然后和服务器建立连接;建立连接后,客户接收键盘输入,然后将数据发送到服务器,服务器收到到数据后,将接收到的字符在屏幕上显示出来。或者服务器接收键盘输入,然后将数据发送到客户机,客户机收到数据后,将接收到的字符在屏幕上显示出来。程序流程: 源程序服务器端:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Net;using System.Net.Sockets;//添加命名空间using System.Threading;//添加命名空间namespace WFAsynSocket{ public partial class Form1 : Form { Thread LisThread; Socket LisSocket; Socket newSocket; EndPoint point; string strmes = String.Empty; int port = 8000;//定义侦听端口号 public Form1() { InitializeComponent(); } private void btn_Listen_Click(object sender, EventArgs e) { LisThread = new Thread(new ThreadStart(BeginListern));//开线程执行BeginListern方法 LisThread.Start();//线程开始执行 } public IPAddress GetIP() { /*获取本地服务器的ip地址 */ IPHostEntry iep = Dns.GetHostEntry(Dns.GetHostName()); IPAddress ip = iep.AddressList[0]; return ip; } public void BeginListern() { LisSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//实例化Socket IPAddress ServerIp = GetIP();/*获取本地服务器的ip地址 */ IPEndPoint iep = new IPEndPoint(ServerIp, port); LisSocket.Bind(iep); /*将Socket绑定ip */ toolStripStatusLabel1.Text = iep.ToString() + "正在监听"; LisSocket.Listen(50); //Socket开始监听 newSocket = LisSocket.Accept();//获取连接请求的Socket /*接收客户端Socket所发的信息 */ while (true) { try { byte[] byteMessage = new byte[100]; newSocket.Receive(byteMessage);//接收信息 MessageBox.Show(Encoding.Default.GetString(byteMessage)); Control.CheckForIllegalCrossThreadCalls = false; point = newSocket.RemoteEndPoint;//获取客户端的Socket的相关信息 IPEndPoint IPpoint = (IPEndPoint)point; strmes+=IPpoint.Address.ToString()+ " " +DateTime.Now.ToString()+"说"+Encoding.Default.GetString(byteMessage).Trim(new char[] { ' ' })+"r "; this.richTextBox1.Text=strmes; } catch (SocketEx ception ex) { toolStripStatusLabel1.Text += ex.ToString(); } } } private void btn_Cancel_Click(object sender, EventArgs e) { try { LisSocket.Close();//关闭Socket LisThread.Abort();//线程停止 LisThread=null; } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { Application.Exit(); } } private void btn_Send_Click(object sender, EventArgs e) { byte[] byteData = Encoding.Default.GetBytes(this.richTextBox2.Text); newSocket.Send(byteData);//发送信息即由服务器往客户端上发信息 }}}客户端:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Threading;using System.Net.Sockets; using System.Net;namespace WFAsynSoketClient{ public partial class Form1 : Form { public static Socket ClientSocket; public Form1() { InitializeComponent(); } /*往服务器上发送信息按钮事件*/ private void btn_Send_Click(object sender, EventArgs e) { if (ClientSocket.Connected)//判断Socket是否已连接 { byte[] SendMessage = new byte[100]; SendMessage = Encoding.ASCII.GetBytes(this.richTextBox1.Text); ClientSocket.Send(SendMessage);//从数据中的指示位置开始将数据发送到连接的Socket。 MessageBox.Show(Encoding.Default.GetString(SendMessage)+"发送成功!"); } else { MessageBox.Show("未建立连接!"); } } /*退出按钮*/ private void btn_Cancel_Click(object sender, EventArgs e) { ClientSocket.Shutdown(SocketShutdown.Both);//发送完成之后停止Socket ClientSocket.Close();//发送完成之后关闭Socket Application.Exit(); } /*接收来自服务器上的信息*/ public void targett() { this.toolStripStatusLabel1.Text = "已经建立连接准备接受数据"; while (true) { byte[] bytes = new byte[100]; int rev = ClientSocket.Receive(bytes,bytes.Length,0);//将数据从连接的 Socket 接收到接收缓冲区的特定位置。 if (rev <= 0) { break; } string strev = System.Text.Encoding.Default.GetString(bytes); this.textBox1.AppendText("服务器对客户端说:"+strev+"r "); } } private void Form1_Load(object sender, EventArgs e) { } /* 为客户端Socket建立连接到服务器*/ private void button1_Click(object sender, EventArgs e) { ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); string ip = "192.168.1.26";//服务器ip IPAddress ipa = IPAddress.Parse(ip); IPEndPoint iep = new IPEndPoint(ipa, 8000); this.toolStripStatusLabel1.Text = "已经建立连接."; Control.CheckForIllegalCrossThreadCalls = false; try { ClientSocket.Connect(iep);//连接到服务器 Thread thread = new Thread(new ThreadStart(targett)); thread.Start(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } }}运行结果:点击开始监听按钮之后客户端界面为: 成功建立连接,进行对话实验心得:通过本次实验及课上老师讲解,了解了TCP与UDP协议和它们之间的区别,以及客户/服务器模型的原理。通过C/S代码的编写运行,形象地看到客户/服务器端的运作方式,对于C/S模型有了很深刻的印象以及进一步理解。通过代码的编写,再一次熟悉Socket编程原理,掌握简单的套接字编程。
此文档下载收益归作者所有
举报原因
联系方式
详细说明
内容无法转码请点击此处