客户端和服务端的编程实现docWord格式.docx

上传人:b****4 文档编号:16116263 上传时间:2022-11-20 格式:DOCX 页数:12 大小:170.42KB
下载 相关 举报
客户端和服务端的编程实现docWord格式.docx_第1页
第1页 / 共12页
客户端和服务端的编程实现docWord格式.docx_第2页
第2页 / 共12页
客户端和服务端的编程实现docWord格式.docx_第3页
第3页 / 共12页
客户端和服务端的编程实现docWord格式.docx_第4页
第4页 / 共12页
客户端和服务端的编程实现docWord格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

客户端和服务端的编程实现docWord格式.docx

《客户端和服务端的编程实现docWord格式.docx》由会员分享,可在线阅读,更多相关《客户端和服务端的编程实现docWord格式.docx(12页珍藏版)》请在冰豆网上搜索。

客户端和服务端的编程实现docWord格式.docx

王体方

王雁飞

专业班级

软件2班

实验日期

2012年5月18日

第一部分:

实验分析与设计

一、实验内容描述(问题域描述)

1、实验目的

1.1理解套接字(socket)通信的基本原理和机制

1.2理解进程间通信的机制。

2、实验要求

分别编写客服端和服务器端代码,建立客户端与服务器端之间正确的socket连结(语言自选,附源代码)

二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等)

1.实验原理

socket的英文原义是“孔”或“插座”。

在这里作为4BDSUNIX的进程通信机制,取后一种意义。

socket非常类似于电话插座。

以一个国家级电话网为例。

电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;

区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。

任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;

同时要知道对方的号码,相当于对方有一个固定的socket。

然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。

对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。

双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。

通话结束后,一方挂起电话机相当于关闭socket,撤消连接。

一个完整的socket有一个本地唯一的socket号,由操作系统分配。

常用的Socket类型有两种:

流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。

流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;

数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。

Socket建立为了建立Socket,程序可以调用Socket函数,该函数返回一个类似于文件描述符的句柄。

socket函数原型为:

intsocket(intdomain,inttype,intprotocol);

domain指明所使用的协议族,通常为PF_INET,表示互联网协议族(TCP/IP协议族);

type参数指定socket的类型:

SOCK_STREAM或SOCK_DGRAM,Socket接口还定义了原始Socket(SOCK_RAW),允许程序使用低层协议;

protocol通常赋值"

0"

Socket()调用返回一个整型socket描述符,你可以在后面的调用使用它。

Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。

调用Socket函数时,socket执行体将建立一个Socket,实际上"

建立一个Socket"

意味着为一个Socket数据结构分配存储空间。

Socket执行体为你管理描述符表。

两个网络程序之间的一个网络连接包括五种信息:

通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。

Socket数据结构中包含这五种信息。

socket在测量软件中的使用也很广泛 

2.实验步骤

本实验在VS2008下实现,本机ip为169.254.59.194,实验要实现客户端与服务端在8000号端口的通信,具体代码如下:

服务端代码

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Windows.Forms;

usingSystem.Net;

usingSystem.Net.Sockets;

usingSystem.Threading;

namespacetemp

{

publicpartialclassForm1:

Form

{

ThreadLisThread;

//线程

SocketLisSocket;

//用于监听

SocketnewSocket;

//用于通信

EndPointpoint;

stringstrmes=string.Empty;

//用于存放通信的信息

publicForm1()

InitializeComponent();

}

privatevoidbutton1_Click(objectsender,EventArgse)

{//建立连接

LisThread=newThread(newThreadStart(BeginListern));

//开线程执行BeginListern方法

LisThread.Start();

//线程开始执行

button1.Enabled=false;

publicvoidBeginListern()

LisSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

//初始化LisSocket

stringip="

169.254.59.194"

;

//本机ip

IPAddressServerIp=IPAddress.Parse(ip);

IPEndPointiep=newIPEndPoint(ServerIp,8000);

LisSocket.Bind(iep);

//绑定socket

toolStripStatusLabel1.Text="

正在监听:

"

+iep.ToString();

LisSocket.Listen(50);

//开始监听

newSocket=LisSocket.Accept();

//获取连接请求的Socket

while(true)

try

byte[]byteMessage=newbyte[100];

newSocket.Receive(byteMessage);

//接受信息

收到信息"

Control.CheckForIllegalCrossThreadCalls=false;

strmes+="

客户端"

+DateTime.Now.ToString()+"

:

\n"

+Encoding.Default.GetString(byteMessage).Trim(newchar[]{'

\0'

})+"

\r\n"

richTextBox1.Text=strmes;

//显示信息

catch(SocketExceptionex)

MessageBox.Show(ex.ToString());

privatevoidbutton3_Click(objectsender,EventArgse)

{//退出

Application.Exit();

privatevoidbutton2_Click(objectsender,EventArgse)

{//发送信息

if(richTextBox2.Text!

="

byte[]byteData=Encoding.ASCII.GetBytes(richTextBox2.Text);

newSocket.Send(byteData);

//发送信息即由服务器往客户端上发信息

服务端"

\n"

+richTextBox2.Text+"

richTextBox2.Text="

//更新输出

成功发送信息"

privatevoidbutton4_Click(objectsender,EventArgse)

{//清空

richTextBox1.Text="

strmes=string.Empty;

privatevoidbutton5_Click(objectsender,EventArgse)

{//断开连接

try

LisSocket.Close();

//关闭Socket

LisThread.Abort();

//线程停止

LisThread=null;

button1.Enabled=true;

catch(Exceptionex)

MessageBox.Show(ex.Message);

}

客户端代码

namespacetmpClient

publicstaticSocketClientSocket;

//客户端Socket

Threadthread;

stringstrev=string.Empty;

//存放通信信息

{//往服务器上发送信息

if(ClientSocket.Connected)//判断Socket是否已连接

byte[]SendMessage=newbyte[100];

SendMessage=Encoding.ASCII.GetBytes(richTextBox2.Text);

ClientSocket.Send(Se

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1