网络编程实验报告31074

网络编程实验报告31074

ID:18577707

大小:216.00 KB

页数:8页

时间:2018-09-19

上传者:xinshengwencai
网络编程实验报告31074_第1页
网络编程实验报告31074_第2页
网络编程实验报告31074_第3页
网络编程实验报告31074_第4页
网络编程实验报告31074_第5页
资源描述:

《网络编程实验报告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编程原理,掌握简单的套接字编程。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭