局域网实时通讯工具-c++builder.doc_第1页
局域网实时通讯工具-c++builder.doc_第2页
局域网实时通讯工具-c++builder.doc_第3页
局域网实时通讯工具-c++builder.doc_第4页
局域网实时通讯工具-c++builder.doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

精品文档计算机与信息学院计算机网络系统实践报告设计题目:局域网实时通讯工具学生姓名: 学 号: 专业班级:计算机科学与技术06级4班2009 年 9 月一、 设计要求1.熟悉WinSock API 主要函数的使用;2.掌握相应开发工具对Windows Socket API的封装;3.制作基于局域网的一对一网络即时通讯工具,实现基本数据的网络传输。二、 开发环境与工具Windows xp C+builder 三、 设计原理网络通讯的基础是套接字Socket.Socket是通信端点的一种概念抽象。它提供了相连的各个通讯端点通过网络进行数据发送和接收机制。Windows Sockets规范是一套开放的,支持多种协议的Windows操作系统下的网络编程API。 Socket接口是TCP/IP网络通信的API。也就是说,Socket接口规定了许多函数和例程,程序员可以用它们来开发TCP/IP网络上的应用程序。今天,Socket接口是TCP/IP网络通信最为通用的API之一。Socket接口概念1. 网间进程通信网间进程通信要解决的是不同主机进程间的相互通信问题。为此,首先要解决的是网络进程标示问题。同一主机上,不同的进程号不能惟一表示该进程。其次,操作系统支持的网络协议众多,不同的协议的工作方式不同,地址格式也不同。因此,网间通信还要解决多重协议的识别问题。端口网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源。地址网络通信中的两个进程分别在不同的机器上。在互联网络中,两台机器可能位于不同的网络,这些网络通过互连设备连接。因此需要三级寻址(1) 某一主机可以与多个网络相联,必须指定一特定网络地址;(2) 网络上每一台主机应有其惟一的地址(3) 每一主机上的每一个进程应有在该主机上的惟一标志。网络字节顺序不同的计算机存放多字节值的顺序不同,有的机器在起始地址存放地位字节,有的存高位字节。连接两个进程间的通讯链路称为连接。半相关网络中用一个三元组可以在全局惟一标志一个进程。全相关一个完整的网络通信需要两个进程组成,并且只使用同一种高层协议。2. 服务方式面向连接和无连接方式面向连接服务中每一次完整的数据传输都要经过建立连接,使用连接终止连接的过程无连接服务中每个数据报都携带完整的目的地址,各数据报在系统中独立传输。顺序 差错控制 流控制 字节流 数据报 缓冲 紧急数据3客户服务器模式4套接字类型流式套接字 数据报式套接字 原始式套接字服务器端流程图打开服务器设置服务器端的端口号点击断开按钮,服务器与客户端断开连接继续监听或者重新设置端口号再监听点击监听,服务器端进入监听状态与客户端连接成功 与客户端连接失败监听到客户端请求连接的信息向客户端发送与接收信息 退出程序客户端流程图打开客户端程序设置相同的端口号以及服务器的IP地址点击断开按钮,客户端与服务器端断开连接点击连接按钮,试图与服务器端取得连接失败连接成功向服务器端发送以及接受信息退出程序四 系统功能描述及软件模块划分服务器设计网络聊天的基础是TCP/IP协议,服务器把程序转换成一个虚拟的TCP/IP服务器,并且和指定的客户端建立连接后,成功后向指定的客户端建立连接,在连接成功后想指定的客户端发出连接信号,在连接成功后,向指定的服务器发出信号。(1) serversocket组件位于组件模版的internet标签页下,使用时直接拖动Form1即可,在使用serversocket组件时,必须设置serversocket的端口号。它与客户端进行通信与连接的通道,客户端必须以相同的端口号才能连接。(2) 在serversocket组件需要重新设置端口号时,应该首先断开与客户端的链接,然后再设置端口号再重新连接。(3) 如果需要使用serversocket组件发送信息,直接使用其方法sendtxt()即可,(4) 当serversocket组件收到客户端发来的信息是,它会启用onclientread事件。要显示相应的内容是,需要自行处理该事件。聊天客户端设计(1)Clientsocket组件位于组件模版的internet标签页下,使用时直接拖动Form1即可,在使用Clientsocket组件时,必须设置Clientsocket的端口号。这个端口号必须与服务器设置的端口号一致,否则它不能与服务器进行连接,并且需要设置连接服务器的IP地址。(2)Clientsocket组件需要重新与其他服务器连接时,应该首先断开与原服务器的链接。然后再设置端口号和服务器IP地址并重新连接。在活动状态时不容许连接新的服务器地址。(3)Clientsocket组件与服务器连接成功时,会产生OnConnect事件,可以处理该事件的相关内容。(4)如果需要使用Clientsocket组件发送消息时,直接使用其方法sendtxt()即可。五 设计步骤服务器端通信端口void _fastcall TForm1:Label1Click(TObject *Sender)Serversocketvoid _fastcall TForm1:ServerSocket1Accept(TObject *Sender, TCustomWinSocket *Socket)监听/-#include #pragma hdrstop#include Unit1.h/-#pragma package(smart_init)#pragma resource *.dfmTForm1 *Form1;/-_fastcall TForm1:TForm1(TComponent* Owner) : TForm(Owner)/-void _fastcall TForm1:Button1Click(TObject *Sender) ServerSocket1-Port=StrToInt(Edit1-Text); ServerSocket1-Active=true; ShowMessage(正在监听客户端连接状态.); Memo1-Lines-Clear(); Memo2-Lines-Clear();/-void _fastcall TForm1:Button2Click(TObject *Sender) ServerSocket1-Close(); ShowMessage(已经和客户端断开了连接.); Memo1-Clear(); Memo2-Clear();/-void _fastcall TForm1:Button3Click(TObject *Sender) ServerSocket1-Socket-Connections0-SendText(Memo2-Text);/ ServerSocket1-Socket-SendText(Memo2-Text);/-void _fastcall TForm1:ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket) Memo1-Lines-Add(Socket-ReceiveText();/-void _fastcall TForm1:Button4Click(TObject *Sender) ServerSocket1-Active=false; Form1-Close(); /-void _fastcall TForm1:ServerSocket1ClientDisconnect(TObject *Sender, TCustomWinSocket *Socket) ShowMessage(客户端已经请求断开连接.); Memo1-Clear(); Memo2-Clear(); /-void _fastcall TForm1:Button6Click(TObject *Sender) Memo1-Clear(); Memo1-SetFocus(); Memo2-Clear(); Memo2-SetFocus();/-void _fastcall TForm1:Label1Click(TObject *Sender)/-void _fastcall TForm1:ServerSocket1Accept(TObject *Sender, TCustomWinSocket *Socket)断开/-#include #pragma hdrstop#include Unit1.h/-#pragma package(smart_init)#pragma resource *.dfmTForm1 *Form1;/-_fastcall TForm1:TForm1(TComponent* Owner) : TForm(Owner)/-void _fastcall TForm1:Button1Click(TObject *Sender) ServerSocket1-Port=StrToInt(Edit1-Text); ServerSocket1-Active=true; ShowMessage(正在监听客户端连接状态.); Memo1-Lines-Clear(); Memo2-Lines-Clear();-void _fastcall TForm1:Button2Click(TObject *Sender) ServerSocket1-Close(); ShowMessage(已经和客户端断开了连接.); Memo1-Clear(); Memo2-Clear();/-void _fastcall TForm1:Button3Click(TObject *Sender) ServerSocket1-Socket-Connections0-SendText(Memo2-Text);/ ServerSocket1-Socket-SendText(Memo2-Text);void _fastcall TForm1:ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket) Memo1-Lines-Add(Socket-ReceiveText();void _fastcall TForm1:Button4Click(TObject *Sender) ServerSocket1-Active=false; Form1-Close(); void _fastcall TForm1:ServerSocket1ClientDisconnect(TObject *Sender, TCustomWinSocket *Socket) ShowMessage(客户端已经请求断开连接.); Memo1-Clear(); Memo2-Clear(); /-void _fastcall TForm1:Button6Click(TObject *Sender) Memo1-Clear(); Memo1-SetFocus(); Memo2-Clear(); Memo2-SetFocus();void _fastcall TForm1:Label1Click(TObject *Sender)void _fastcall TForm1:ServerSocket1Accept(TObject *Sender, TCustomWinSocket *Socket)发送/-#include #pragma hdrstop#include Unit1.h/-#pragma package(smart_init)#pragma resource *.dfmTForm1 *Form1;/-_fastcall TForm1:TForm1(TComponent* Owner) : TForm(Owner)/-void _fastcall TForm1:Button1Click(TObject *Sender) ServerSocket1-Port=StrToInt(Edit1-Text); ServerSocket1-Active=true; ShowMessage(正在监听客户端连接状态.); Memo1-Lines-Clear(); Memo2-Lines-Clear();void _fastcall TForm1:Button2Click(TObject *Sender) ServerSocket1-Close(); ShowMessage(已经和客户端断开了连接.); Memo1-Clear(); Memo2-Clear();void _fastcall TForm1:Button3Click(TObject *Sender) ServerSocket1-Socket-Connections0-SendText(Memo2-Text);/ ServerSocket1-Socket-SendText(Memo2-Text);void _fastcall TForm1:ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket) Memo1-Lines-Add(Socket-ReceiveText();void _fastcall TForm1:Button4Click(TObject *Sender) ServerSocket1-Active=false; Form1-Close(); void _fastcall TForm1:ServerSocket1ClientDisconnect(TObject *Sender, TCustomWinSocket *Socket) ShowMessage(客户端已经请求断开连接.); Memo1-Clear(); Memo2-Clear(); void _fastcall TForm1:Button6Click(TObject *Sender) Memo1-Clear(); Memo1-SetFocus(); Memo2-Clear(); Memo2-SetFocus();void _fastcall TForm1:Label1Click(TObject *Sender)void _fastcall TForm1:ServerSocket1Accept(TObject *Sender, TCustomWinSocket *Socket)刷新#include #pragma hdrstop#include Unit1.h#pragma package(smart_init)#pragma resource *.dfmTForm1 *Form1;_fastcall TForm1:TForm1(TComponent* Owner) : TForm(Owner)void _fastcall TForm1:Button1Click(TObject *Sender) ServerSocket1-Port=StrToInt(Edit1-Text); ServerSocket1-Active=true; ShowMessage(正在监听客户端连接状态.); Memo1-Lines-Clear(); Memo2-Lines-Clear();void _fastcall TForm1:Button2Click(TObject *Sender) ServerSocket1-Close(); ShowMessage(已经和客户端断开了连接.); Memo1-Clear(); Memo2-Clear();/-void _fastcall TForm1:Button3Click(TObject *Sender) ServerSocket1-Socket-Connections0-SendText(Memo2-Text);/ ServerSocket1-Socket-SendText(Memo2-Text);void _fastcall TForm1:ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket) Memo1-Lines-Add(Socket-ReceiveText();/-void _fastcall TForm1:Button4Click(TObject *Sender) ServerSocket1-Active=false; Form1-Close(); /-void _fastcall TForm1:ServerSocket1ClientDisconnect(TObject *Sender, TCustomWinSocket *Socket) ShowMessage(客户端已经请求断开连接.); Memo1-Clear(); Memo2-Clear(); /-void _fastcall TForm1:Button6Click(TObject *Sender) Memo1-Clear(); Memo1-SetFocus(); Memo2-Clear(); Memo2-SetFocus();/-void _fastcall TForm1:Label1Click(TObject *Sender)/-void _fastcall TForm1:ServerSocket1Accept(TObject *Sender, TCustomWinSocket *Socket)退出/-#include #pragma hdrstop#include Unit1.h/-#pragma package(smart_init)#pragma resource *.dfmTForm1 *Form1;/-_fastcall TForm1:TForm1(TComponent* Owner) : TForm(Owner)/-void _fastcall TForm1:Button1Click(TObject *Sender) ServerSocket1-Port=StrToInt(Edit1-Text); ServerSocket1-Active=true; ShowMessage(正在监听客户端连接状态.); Memo1-Lines-Clear(); Memo2-Lines-Clear();/-void _fastcall TForm1:Button2Click(TObject *Sender) ServerSocket1-Close(); ShowMessage(已经和客户端断开了连接.); Memo1-Clear(); Memo2-Clear();/-void _fastcall TForm1:Button3Click(TObject *Sender) ServerSocket1-Socket-Connections0-SendText(Memo2-Text);/ ServerSocket1-Socket-SendText(Memo2-Text);/-void _fastcall TForm1:ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket) Memo1-Lines-Add(Socket-ReceiveText();/-void _fastcall TForm1:Button4Click(TObject *Sender) ServerSocket1-Active=false; Form1-Close();/-void _fastcall TForm1:ServerSocket1ClientDisconnect(TObject *Sender, TCustomWinSocket *Socket) ShowMessage(客户端已经请求断开连接.); Memo1-Clear(); Memo2-Clear(); /-void _fastcall TForm1:Button6Click(TObject *Sender) Memo1-Clear(); Memo1-SetFocus(); Memo2-Clear(); Memo2-SetFocus();/-void _fastcall TForm1:Label1Click(TObject *Sender)/-void _fastcall TForm1:ServerSocket1Accept(TObject *Sender, TCustomWinSocket *Socket)接收信息void _fastcall TForm1:Label2Click(TObject *Sender)发送信息void _fastcall TForm1:Label3Click(TObject *Sender)客户端连接/-#include #pragma hdrstop#include Unit1.h/-#pragma package(smart_init)#pragma resource *.dfmTForm1 *Form1;/-_fastcall TForm1:TForm1(TComponent* Owner) : TForm(Owner)/-void _fastcall TForm1:Button1Click(TObject *Sender) ClientSocket1-Port=StrToInt(Edit1-Text); ClientSocket1-Host=Edit2-Text; ClientSocket1-Active=true; ShowMessage(连接服务器成功); Memo1-Clear(); Memo2-Clear();/-void _fastcall TForm1:Button2Click(TObject *Sender) ClientSocket1-Close();/ ShowMessage(已经和服务器断开了连接.); Memo1-Clear(); Memo2-Clear(); /-void _fastcall TForm1:Button3Click(TObject *Sender) ClientSocket1-Socket-SendText(Memo2-Text); /-void _fastcall TForm1:ClientSocket1Connect(TObject *Sender, TCustomWinSocket *Socket) ShowMessage(已经连接到+Edit2-Text); Memo1-Lines-Clear(); /-void _fastcall TForm1:Button4Click(TObject *Sender) ClientSocket1-Active=false; Form1-Close();/-void _fastcall TForm1:Button5Click(TObject *Sender)/ Edit1-Clear();/ Edit2-Clear(); Memo1-Clear(); Memo1-SetFocus(); Memo2-Clear(); Memo2-SetFocus();/-void _fastcall TForm1:ClientSocket1Disconnect(TObject *Sender, TCustomWinSocket *Socket) ShowMessage(已经和服务器断开了连接.); /-void _fastcall TForm1:ClientSocket1Read(TObject *Sender, TCustomWinSocket *Socket) Memo1-Lines-Add(ClientSocket1-Socket-ReceiveText(); /-断开/-#include #pragma hdrstop#include Unit1.h/-#pragma package(smart_init)#pragma resource *.dfmTForm1 *Form1;/-_fastcall TForm1:TForm1(TComponent* Owner) : TForm(Owner)/-void _fastcall TForm1:Button1Click(TObject *Sender) ClientSocket1-Port=StrToInt(Edit1-Text); ClientSocket1-Host=Edit2-Text; ClientSocket1-Active=true; ShowMessage(连接服务器成功); Memo1-Clear(); Memo2-Clear();/-void _fastcall TForm1:Button2Click(TObject *Sender) ClientSocket1-Close();/ ShowMessage(已经和服务器断开了连接.); Memo1-Clear(); Memo2-Clear(); /-void _fastcall TForm1:Button3Click(TObject *Sender) ClientSocket1-Socke

温馨提示

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

评论

0/150

提交评论