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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实 验 报 告18p.docx

1、实 验 报 告18p实 验 报 告学院(部):理学院 班级:信计1101班 学号:11411100131 姓名:杨宠实验课程C#程序设计实验名称利用同步TCP编写网络聊天程序指导老师江力实验性质(选修、必修)必修实验类型(验证、设计、创新、综合)验证实验课时4课时实验日期、时间2013-9-182013-10-09实验消耗材料PC机实验仪器设备(实验硬件要求)计算机一台,Visual stadio 2010实验目的掌握C#的同步TCP应用编程方法。实验内容(实验原理、可用的理论知识、算法、程序、步骤和方法)一、 实验内容 同步TCP服务器端应用编程与客户端应用编程。二、 实验基本原理 利用Tc

2、pListener类、TcpClient类、Socket类提供的方法进行同步TCP应用编程。三、 注意事项BinaryReader, BinaryWriter类的应用,及TCP类及协议的一些知识运用。四、 实验步骤1、 同步TCP服务器端应用编程:网络聊天服务器;2、 同步TCP客户端应用编程:网络聊天客户端。1.服务器端编程:(1)创建一个名为SyncChatServer的Windows应用程序,将Form1.cs换名为MainForm.cs,设计界面如下图所示:(2)在解决方案资源管理器中,添加一个名为User.cs的文件,用于保存与客户通信需要的信息,代码如下:using System.

3、Net.Sockets;using System.IO;namespace SyncChatServer class User public TcpClient client;/get; private set; public BinaryReader br;/get; private set; public BinaryWriter bw;/get; private set; public string userName;/ get; set; public User(TcpClient client) this.client = client; NetworkStream networkS

4、tream = client.GetStream(); br = new BinaryReader(networkStream); bw = new BinaryWriter(networkStream); public void Close() br.Close(); bw.Close(); client.Close(); (3)在MainForm中添加对应的代码和事件:using System;using System.Collections.Generic;using System.Windows.Forms;/添加的命名空间引用using System.Net;using System

5、.Net.Sockets;using System.Threading;namespace SyncChatServer public partial class MainForm : Form / 保存连接的所有用户 private List userList = new List(); / 使用的本机IP地址 IPAddress localAddress; / 监听端口 private const int port = 51888; private TcpListener myListener; / 是否正常退出所有接收线程 bool isNormalExit = false; publi

6、c MainForm() InitializeComponent(); listBoxStatus.HorizontalScrollbar = true; IPAddress addrIP = Dns.GetHostAddresses(Dns.GetHostName(); localAddress = addrIP0; buttonStop.Enabled = false; / 【开始监听】按钮的Click事件 private void buttonStart_Click(object sender, EventArgs e) myListener = new TcpListener(loca

7、lAddress, port); myListener.Start(); AddItemToListBox(string.Format(开始在0:1监听客户连接, localAddress, port); /创建一个线程监听客户端连接请求 Thread myThread = new Thread(ListenClientConnect); myThread.Start(); buttonStart.Enabled = false; buttonStop.Enabled = true; / 接收客户端连接 private void ListenClientConnect() TcpClient

8、newClient = null; while (true) try newClient = myListener.AcceptTcpClient(); catch /当单击“停止监听”或者退出此窗体时AcceptTcpClient()会产生异常 /因此可以利用此异常退出循环 break; /每接受一个客户端连接,就创建一个对应的线程循环接收该客户端发来的信息 User user = new User(newClient); Thread threadReceive = new Thread(ReceiveData); threadReceive.Start(user); userList.A

9、dd(user); AddItemToListBox(string.Format(0进入, newClient.Client.RemoteEndPoint); AddItemToListBox(string.Format(当前连接用户数:0, userList.Count); / / 处理接收的客户端数据 / / 客户端信息 private void ReceiveData(object userState) User user = (User)userState; TcpClient client = user.client; while (isNormalExit = false) str

10、ing receiveString = null; try /从网络流中读出字符串,此方法会自动判断字符串长度前缀,并根据长度前缀读出字符串 receiveString = user.br.ReadString(); catch if (isNormalExit = false) AddItemToListBox(string.Format(与0失去联系,已终止接收该用户信息, client.Client.RemoteEndPoint); RemoveUser(user); break; AddItemToListBox(string.Format(来自0:1, user.client.Cli

11、ent.RemoteEndPoint, receiveString); string splitString = receiveString.Split(,); switch (splitString0) case Login: user.userName = splitString1; SendToAllClient(user, receiveString); break; case Logout: SendToAllClient(user, receiveString); RemoveUser(user); return; case Talk: string talkString = re

12、ceiveString.Substring(splitString0.Length + splitString1.Length + 2); AddItemToListBox(string.Format(0对1说:2, user.userName, splitString1, talkString); SendToClient(user, talk, + user.userName + , + talkString); foreach (User target in userList) if (target.userName = splitString1 & user.userName != s

13、plitString1) SendToClient(target, talk, + user.userName + , + talkString); break; break; default: AddItemToListBox(什么意思啊: + receiveString); break; / / 发送message给user / / 指定发给哪个用户 / 信息内容 private void SendToClient(User user, string message) try /将字符串写入网络流,此方法会自动附加字符串长度前缀 user.bw.Write(message); user.bw.Flush(); AddItemToListBox(string.Format(向0发送:1, user.userName, message); catch AddItemToListBox(string.Format(向0发送信息失败, user.userName); / 发送信息给所有客户/summ

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

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