ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:51.02KB ,
资源ID:4254720      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-4254720.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(网络编程 套接字Word文档格式.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

网络编程 套接字Word文档格式.docx

1、简单邮件传送协议(Simple Mail Transfer Protocol)SMTP协议为系统之间传送电子邮件。TELNET:终端协议(Telnet Terminal Procotol)允许用户以虚终端方式访问远程主机HTTP:超文本传输协议(Hypertext Transfer Procotol)TFTP: 简单文件传输协议(Trivial File Transfer Protocol)TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中实现。因此用户一般不涉及。 编程时,编程界面有两种形式:一、是由内核心直接提供的系统调用

2、;二、使用以库函数方式提供的各种函数。前者为核内实现,后者为核外实现。用户服务要通过 核外的应用程序才能实现,所以要使用套接字(socket)来实现。套接字基本概念: 套接字是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个 网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数 据交换也可能穿越域的界限,但这时一定要执行某种解释程序)。各种进程使用这个相同的域互相之间用Internet协议簇来进行通信。套接字可以根据

3、通信性质分类,这种性质对于用户是可见的。应用程序一般仅在同一类的套接字间进行通信。不过只要底层的通信协议允许,不同类型的套接字间也照样可以通信。套接字有两种不同的类型:流套接字和数据报套接字。(1)流式套接字(SOCK_STREAM):一种面向连接的Socket,针对于面向连接的TCP服务应用;(2)数据报式套接字(SOCK_DGRAM):一种无连接的Socket,对应于无连接的UDP服务应用。 从用户的角度来看,SOCK_STREAM、SOCK_DGRAM这两类套接字似乎的确涵盖了TCP/IP应用的全部,因为基于TCP/IP的应用,从 协议栈的层次上讲,在传输层的确只可能建立于TCP或UDP

4、协议之上,而SOCK_STREAM、SOCK_DGRAM又分别对应于TCP和UDP,所以 几乎所有的应用都可以用这两类套接字实现。套接字工作原理:要通过互联网进行通信,你至少需要一对套接字,其中一个运行于客户机端,我们称之为ClientSocket,另一个运行于服务器端,我们称之为ServerSocket。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。所谓服务器监听,是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。所谓客户端请求,是指由客户端的套接字提出连接请求,要连接的目标是服务器端

5、的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。所谓连接确认,是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述 发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。典型过程图面向连接的套接字的系统调用时序图无连接协议的套接字调用时序图C#实现套接字编程的实例聊天室程序本程序是基于C/S(服务器/客户端)构架的,程序包含一个服务器端的应用程序和一个客户端的应

6、用程序。首先,在服务器上运行服务器端的应用程序,该程序一运行就开始服务器监听。然后,在客户机上就可以打开客户端的应用程序。程序打开后可以与服务器端应用程序进行连接,即进行客户端请求。在连接确认后,客户端用户可以和其他的客户端用户进行聊天。客户端人数没有限制,同时还支持“悄悄话”聊天模式,支持聊天记录。所以这是一个学习套接字编程的相当不错的例子。而且,程序中为了处理每个客户端的信息还用到了多线程机制。在每个客户端与服务器端连接成功后,它们之间就建立一个线程。这样运用了多线程之后,客户端之间就不会相互影响,即使其中一个出了错误也不会影响到另一个。服务器端程序:布置界面。只需在界面上添加一个List

7、Box控件即可,该控件主要用于显示客户端的用户的一些信息的。服务器端程序的代码编写:对于服务器端,主要的作用是监听客户端的连接请求并确认其请求。程序一开始便打开一个StartListening()线程。开始定义如下变量:private System.Net.Sockets.TcpListener theListener;private System.Net.Sockets.Socket clientSocket;private System.Threading.Thread clientService;StartListening()函数如下:private void StartListeni

8、ng() theListener = new System.Net.Sockets.TcpListener(listenPort); /listenPort为端口号 theListener.Start(); while (true) try System.Net.Sockets.Socket s = theListener.AcceptSocket(); clientSocket = s; clientService = new System.Threading.Thread(new System.Threading.ThreadStart(ServiceClient); clientServ

9、ice.Start(); catch(Exception e) Console.WriteLine(e.ToString() ); 该线程是一直处于运行状态的。当服务器端接收到一个来自客户端的连接请求后,它就打开一个ServiceClient()线程来服务客户端。当一个连接被建立后,每个客户端就被赋予一个属于它自己的套接字。同时,一个Client类的对象被建立。该对象包含了客户端的一些相关信息,该信息被保存在一个数组列表中。Client类如下:using System;using System.Net;using System.Net.Sockets;using System.IO;using

10、 System.Threading;namespace ChatServerpublic class Client private Thread clientThread;private EndPoint theEndPoint;private string name;private Socket sock;public Client(string _name, EndPoint _endpoint, Thread _thread, Socket _sock) clientThread = _thread;theEndpoint = _endpoint;name = _name;sock =

11、_sock;public override string ToString() return TheEndpoint.ToString()+ : + name;public Thread CLThread getreturn clientThread;setclientThread = value;public EndPoint Host getreturn theEndpoint;settheEndpoint = value;public string TheName getreturn name;setname = value;public Socket TheSock getreturn

12、 sock;setsock = value;程序的主体部分应是ServiceClient()函数。该函数是一个独立的线程,其主要部分是一个while循环。在循环体内,程序处理各种客户端命令。服务器端接收来自客户端的以ASCII码给出的字符串,其中包含了一个|形式的分隔符。字符串中以前的部分就是具体的命令,包括CONN、CHAT、PRIV、GONE四种类型。CONN命令建立一个新的客户端连接,将现有的用户列表发送给新用户并告知其他用户有一个新用户加入。CHAT命令将新的信息发送给所有用户。PRIV命令将悄悄话发送给某个用户。GONE命令从用户列表中除去一个已离开的用户并告知其他的用户某某已经离开

13、了。同时,GONE命令可以设置布尔型的变量keepAlive为false从而结束与客户端连接的线程。ServiceClient()函数如下:private void ServiceClient() System.Net.Sockets.Socket clientS = clientSocket;bool keepAlive = true;while (keepAlive)Byte buffer = new Byte1024;clientS.Receive(buffer);string clientCommand = System.Text.Encoding.ASCII.GetString(bu

14、ffer);string tokens = clientCommand.Split(new Char|);Console.WriteLine(clientCommand);if (tokens0 = CONN) for(int n=0; nclients.Count;n+)Client cl = (Client)clientsn;SendToClient(cl, JOIN| + tokens1);System.Net.EndPoint ep = clientS.RemoteEndPoint;Client c = new Client(tokens1, ep, clientService, cl

15、ientS);clients.Add(c);string message = LIST| + GetChatterList() +rn;SendToClient(c, message);lbClients.Items.Add(c);CHATn+) SendToClient(cl, clientCommand);PRIVstring destClient = tokens3;if(cl.Name.CompareTo(tokens3) = 0) if(cl.Name.CompareTo(tokens1) = 0) GONEint remove = 0;bool found = false;int

16、c = clients.Count;remove = n;found = true;lbClients.Items.Remove(cl);if(found) clients.RemoveAt(remove);clientS.Close();keepAlive = false;这样,服务器端程序就基本完成了。客户端程序的代码编写:往界面上添加一个ListBox控件(用于显示用户列表),一个RichTextBox控件(用于显示聊天消息以及系统消息),一个 TextBox控件(用于发送消息),一个CheckBox控件(确定是否为悄悄话),一个StatusBar控件(name=StatusBar1)以

17、 及四个Button控件(分别为“连接”、“断开连接”、“开始记录”、“发送”)。当客户端试图和服务器端进行连接时,一个连接必须建立而且得向服务器端进行注册。 ConnectionServer()函数运用一个TcpClient来和服务器端取得连接,同时创建一个NetworkStream来发送消息。还有, 端口号和服务器端的是保持一致的。先声明如下变量:private System.Net.Sockets.TcpClient clientSocket;private System.Net.Sockets.NetworkStream ns;private System.IO.StreamReade

18、r sr;ConnectionServer()函数如下:private void ConnectionServer()StatusBar1.Text = 正在连接到服务器clientSocket = new System.Net.Sockets.TcpClient(serverAddress,serverPort);ns = clientSocket.GetStream();sr = new System.IO.StreamReader(ns);connected = true;catch (Exception) MessageBox.Show(不能连接到服务器!,错误, MessageBox

19、Buttons.OK, MessageBoxIcon.Exclamation);已断开连接在和服务器端连接成功后,程序就用RegisterWithServer()函数向服务器端发送一个CONN命令。该命令先是发送该用户的名称,然后从服务器端获得其他所有用户的列表,所有用户列表是在ListBox控件中显示的。RegisterWithServer()函数如下:private void RegisterWithServer() string command = CONN| + ChatOut.Text;Byte outBytes = System.Text.Encoding.ASCII.GetByt

20、es(command.ToCharArray();ns.Write(outBytes,0,outBytes.Length);string serverResponse = sr.ReadLine();serverResponse.Trim();string tokens = serverResponse.Split(new Charif(tokens0 = LIST已连接btnCloseConnection.Enabled = true;for(int n=1;tokens.Length;lbChatters.Items.Add(tokensn.Trim(new charr,n);this.T

21、ext = clientName + :已连接到服务器注册时发生错误!在此之后,当然就是用户之间的聊天了,由ReceiveChat()函数来完成。该函数是一个独立的线程,它处理所有用户获得的消息和用户发送的消息。它主要处理了CHAT、PRIV、JOIN、GONE、QUIT等命令,处理的方法和服务器端的类似。ReceiveChat()函数实现如下:private void ReceiveChat() while (keepAlive) Byte buffer = new Byte2048;ns.Read(buffer,0,buffer.Length);string chatter = Syste

22、m.Text.Encoding.ASCII.GetString(buffer);string tokens = chatter.Split(new CharrtbChatIn.AppendText(tokens1);if(logging) logwriter.WriteLine(tokens1);rtbChatIn.AppendText(Private from );rtbChatIn.AppendText(tokens1.Trim() );rtbChatIn.AppendText(tokens2 + logwriter.Write(logwriter.Write(tokens1.Trim()

23、 );logwriter.WriteLine(tokens2 + JOIN has joined the Chatrnlogwriter.WriteLine(tokens1+ has joined the Chatstring newguy = tokens1.Trim(new charlbChatters.Items.Add(newguy); has left the Chatrn has left the ChatlbChatters.Items.Remove(tokens1.Trim(new charQUITns.Close();clientSocket.Close();服务器端已停止c

24、onnected= false;btnSend.Enabled = false;btnCloseConnection.Enabled = false;catch(Exception) 通过以上的一些函数,客户端程序之间就可以进行自由地聊天了,各个用户之间还可以互相发送悄悄话。所以程序已经实现了聊天室的基本功能了,不过最后各个用户还要正常地退出,那就要用到QuitChat()函数了。QuitChat()函数的具体实现如下:private void QuitChat() if(connected) GONE| + clientName;Byte outBytes = System.Text.Encoding

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2