客户端和服务端的编程实现_第1页
客户端和服务端的编程实现_第2页
客户端和服务端的编程实现_第3页
免费预览已结束,剩余9页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学生学号王体方10109281实验课王雁飞10109282成绩电子科技大学学生实验报告书实验课程名称 计算机网络 实验七开课学院软件工程学院指导老师 红标学生姓名王体方王雁飞学生专业班级软件2班20112012 学年 第 二 学期实验课程名称:计算机网络实验项目名称客户和服务器通信编程实现实验成绩实验者王体方王雁飞专业班级软件2班实验日期2012年 5月18日第一部分:实验分析与设计一、实验容描述(问题域描述)1、实验目的1.1理解套接字(socket)通信的基本原理和机制1.2理解进程间通信的机制。2、实验要求分别编写客服端和服务器端代码,建立客户端与服务器端之间正确的socket连结(语言

2、自选,附源代码)二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等)1实验原理socket的英文原义是 孔”或插座”在这里作为4BDS UNIX的进程通信机制, 取后一种意义。socket非常类似于插座。以一个国家级网为例。的通话双方相当于 相互通信的2个进程,区号是它的网络地址;区一个单位的交换机相当于一台主机, 主机分配给每个用户的局相当于 socket号。任何用户在通话之前,首先要占有一 部机,相当于申请一个socket;同时要知道对方的,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区,还要拨 对方区号,相当于给出网络地址

3、)。对方假如在场并空闲(相当于通信的另一主机开 机且可以接受连接请求),拿起话筒,双方就可以正式通话,相当于连接成功。双 方通话的过程,是一方向机发出信号和对方从机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起机相当于关闭socket,撤消连接。一个完整的socket有一个本地唯一的socket号,由操作系统分配。常用的 Socket类型有两种:流式 Socket( SOCK_STREAM和数据报式 Socket (SOCK_DGRAM。流式是一种面向连接的 Socket,针对于面向连接的TCP服务应 用;数据报式Socket是一种无连接的Socke

4、t,对应于无连接的UDP服务应用。Socket建立为了建立Socket,程序可以调用Socket函数,该函数返回一个类似于 文件描述符的句柄。socket函数原型为:int socket(int domain, int type, intprotocol);domain指明所使用的协议族,通常为PF_INET表示互联网协议族(TCP/IP 协议族);type 参数指定 socket 的类型:SOCK_STREAM或 SOCK_DGRAM,Socket 接口还定义了原始Socket( SOCK_RAW,允许程序使用低层协议;protocol通常 赋值0。Socket()调用返回一个整型socke

5、t描述符,你可以在后面的调用使用它。Socket描述符是一个指向部数据结构的指针,它指向描述符表入口。调用 Socket 函数时,socket执行体将建立一个 Socket,实际上建立一个Socket意味着为一个 Socket数据结构分配存储空间。Socket执行体为你管理描述符表。两个网络程序 之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远 端主机地址和远端协议端口。Socket数据结构中包含这五种信息。socket在测量软件中的使用也很广泛2实验步骤本实验在VS2008下实现,本机ip为,实验要实现客户端与服务端 在8000号端口的通信,具体代码如下:服务端代码u

6、sing System;using System.Collect ion s.Ge neric;using System.Comp onen tModel;using System.Data;using System.Draw ing;using System.Linq;using System.Text;using System.Wi ndows.Forms;using System.Net;using System.Net.Sockets;using System.Thread ing;n amespace temppublic partial class Forml : FormThre

7、ad LisThread;/ 线程Socket LisSocket;/ 用于监听Socket newSocket;/ 用于通信En dPo int point;stri ng strmes = stri ng.Empty; /用于存放通信的信息public Form1()In itializeComp onen t();private void butt on 1_Click(object sen der, Even tArgs e)/建立连接LisThread = new Thread( new ThreadStart(Begi nListern);/开线程执行BeginListern方法L

8、isThread.Start();/ 线程开始执行butt on 1.E nabled = false;public void Begi nLister n()LisSocket = newSocket(AddressFamily.l nterNetwork,SocketType.Stream,ProtocolType.Tcp);/ 初始化 LisSocketstring ip = 94;/ 本机 ipIPAddress ServerIp = IPAddress.Parse(ip);IPEndPoint iep = new IPEndPoint(ServerIp, 80

9、00);LisSocket.Bind(iep);/ 绑定 sockettoolStripStatusLabel1.Text =正在监听:” + iep.ToStri ng();LisSocket.Liste n(50);/ 开始监听newSocket = LisSocket.Accept(); / 获取连接请求的 Socket while (true)trybyte byteMessage = new byte100;newSocket.Receive(byteMessage); / 接受信息 toolStripStatusLabel1.Text =收到信息;Con trol.CheckFor

10、IllegalCrossThreadCalls = false;strmes += 客户端 ” + DateTime.Now.ToString() + : n +Encoding.Default.GetString(byteMessage).Trim(new char 0 )+rn;richTextBox1.Text = strmes;/ 显示信息catch(SocketExcepti on ex)MessageBox.Show( ex.ToStri ng();private void butt on 3_Click(object sen der, Even tArgs e)/退出Applic

11、atio n.Exit();private void butt on 2_Click(object sen der, Even tArgs e)/发送信息if (richTextBox2.Text !=)byte byteData = En codi ng.ASCII.GetBytes(richTextBox2.Text);n ewSocket.Se nd(byteData);/发送信息即由服务器往客户端上发信息strmes += 服务端 ” + DateTime.Now.ToString() + :n” +richTextBox2.Text + rn;richTextBox2.Text =;

12、richTextBox1.Text = strmes;/ 更新输出toolStripStatusLabel1.Text =成功发送信息;private void butt on4 _Click(object sen der, Even tArgs e)/清空richTextBox1.Text =; strmes = stri ng.Empty;private void butt on 5_Click(object sen der, Even tArgs e)/断开连接tryLisSocket.Close();/ 关闭 SocketLisThread.Abort();/ 线程停止LisThrea

13、d = nu II;butt on 1.E nabled = true;toolStripStatusLabel1.Text =;catch (Excepti on ex)MessageBox.Show(ex.Message);客户端代码using System;using System.Collect ion s.Ge neric;using System.Comp onen tModel;using System.Data;using System.Draw ing;using System.Linq;using System.Text;using System.Wi ndows.Form

14、s;using System.Thread ing;using System.Net.Sockets;using System.Net;n amespace tmpClie ntpublic partial class Form1 : Formpublic static Socket ClientSocket;/ 客户端 SocketThread thread;string strev = string.Empty;/ 存放通信信息public Form1()In itializeComp onen t();private void butt on 2_Click(object sen der

15、, Even tArgs e) /往服务器上发送信息if (ClientSocket.Connected) /判断 Socket 是否已连接if (richTextBox2.Text !=”)byte Se ndMessage = new byte1OO;Se ndMessage = En codi ng.ASCII.GetBytes(richTextBox2.Text);Clie ntSocket.Se nd(Se ndMessage);II将数据数据发送到连接的Socket中toolStripStatusLabel1.Text =成功发送信息;strev +=客户端 ” + DateTim

16、e.Now.ToString() + :n +richTextBox2.Text + rn;richTextBoxl.Text = strev;II 显示通信信息richTextBox2.Text =;elseMessageBox.Show(” 尚未建立连接”);private void butt on 3_Click(object sen der, Even tArgs e)/退出Applicatio n.Exit();public void targett()/接收来自服务器上的信息toolStripStatusLabel1.Text = 连接已建立;while (true)Con tro

17、l.CheckForlllegalCrossThreadCalls = false;byte bytes = new byte1OO;int rev = ClientSocket.Receive(bytes);/ 接受信息if (rev = 0) break;strev +=服务器 ” + DateTime.Now.ToString() + :n +Encoding.Default.GetString(bytes).Trim(new char 0 ) + rn; richTextBox1.Text = strev;toolStripStatusLabel1.Text =收到信息;private

18、 void butt on 1_Click(object sen der, Even tArgs e)/为客户端Socket建立连接到服务器Clie ntSocket = new Socket(AddressFamily.I nterNetwork, SocketType.Stream, ProtocolType.Tcp);string ip = 94;/ 服务器 ipIPAddress ipa = IPAddress.Parse(ip);IPEndPoint iep = new IPEndPoint(ipa, 8000);toolStripStatusLabel1.Text = 已经建立连接.; tryClie ntSocket.Co nn ect(iep); /连接到服务器thread = new Thr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论