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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

陈振辉虞在洋网络编程聊天程序报告.docx

1、陈振辉虞在洋网络编程聊天程序报告网络编程实验报告 -C#语言编写聊天程序Winform平台学号 12224506 姓名 : 陈振辉 姓名: 虞在洋 专业: 计算机科学与技术 班级: 5班 一、实验目的:(1)熟悉和掌握网络编程的基本方法和步骤;(2)进一步理解client/server交互模式;(3)加深学生对于网络协议概念的理解以及协议的设计和实现方法。二、实验任务:使用任意网络编程语言(Java、C、VB、Delphi等)编写网络选课模拟程序,它由client和server两部分组成,client和server之间的通信基于TCP协议。实现数据的收发。三、网络编程:大多数网络应用程序都遵从

2、client/server交互模型。该模型中,服务器应用是一种专门用来提供某一种服务的程序,它被动地等待通信,而客户应用主动地启动通信,请求服务器的服务。服务器程序既可以接收信息也能发送信息,还可以成为客户。TCP/UDP赋予每个服务一个唯一的协议端口号。服务器程序通过协议端口号来指定它所提供的服务,然后被动地等待通信。客户在发送连接请求时,必须说明服务器程序运行主机的IP地址和协议端口号来指定它所希望的服务。服务器端计算机通过此端口号将收到的请求转向正确的服务器程序。大多数网络编程语言都提供或者使用控件封装了套接字应用程序接口(Socket API),应用程序通过套接字接口调用来实现和传输层

3、交互。用户目前可以使用两种套接口,即流套接字TCP和数据报套接字UDP。流式套接字定义了一种可靠的面向连接的服务,提供了双向的,有序的,无重复并且无记录边界的数据流服务。数据报套接字定义了一种无连接的服务,支持双向的数据流,但并不保证是可靠,有序,无重复的。也就是说,一个从数据报套接字接收信息的进程有可能发现信息重复了,或者和发出时的顺序不同。数据报套接字的一个重要特点是它保留了记录边界。套节字API主要包括表1所示的接口。使用面向连接的套接字编程,通过图2来表示其时序。套接字工作过程如下:服务器首先启动,通过调用socket()建立一个套接字,然后调用bind()将该套接字和本地网络地址联系

4、在一起,再调用listen()使套接字做好侦听的准备,并规定它的请求队列的长度,之后就调用accept()来接收连接。客户在建立套接字后就可调用connect()和服务器建立连接,连接一旦建立,客户机和服务器之间就可以通过调用read()和write()来发送和接收数据。最后,待数据传送结束后,双方调用close()关闭套接字。表1 套节字API主要接口接口解释SOCKETBINDLISTENACCEPTCONNETSENDRECVCLOSE创建一个新的套接字给服务器绑定一个传输层地址将服务器设为被动模式接收客户的一个请求客户向服务器发起连接向一个连接的套接字发送数据从一个连接的套接字接收数据

5、终止一个连接四程序设计及编程思路打开Vc2010新建一个winform工程文件如图客户端using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Net.Sockets;using System.Threading;using System.Net;using System.IO

6、;using System.IO; namespace ChatClient public partial class FClient : Form public FClient() InitializeComponent(); /关闭对文本框的非法线程操作检查 TextBox.CheckForIllegalCrossThreadCalls = false; /创建 1个客户端套接字 和1个负责监听服务端请求的线程 Socket socketClient = null; Thread threadClient = null; private void btnBeginListen_Click(

7、object sender, EventArgs e) /定义一个套字节监听 包含3个参数(IP4寻址协议,流式连接,TCP协议) socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); /需要获取文本框中的IP地址 IPAddress ipaddress = IPAddress.Parse(txtIP.Text.Trim(); /将获取的ip地址和端口号绑定到网络节点endpoint上 IPEndPoint endpoint = new IPEndPoint(ipa

8、ddress, int.Parse(txtPort.Text.Trim(); /这里客户端套接字连接到网络节点(服务端)用的方法是Connect 而不是Bind socketClient.Connect(endpoint); /创建一个线程 用于监听服务端发来的消息 threadClient = new Thread(RecMsg); /将窗体线程设置为与后台同步 threadClient.IsBackground = true; /启动线程 threadClient.Start(); button1.Enabled = false; /MessageBox.Show(连接成功!); txtM

9、sg.Text = niechen.Text + 连接服务器成功+n; btnBeginListen.Enabled = false; / 接收服务端发来信息的方法 / private void RecMsg() while (true) /持续监听服务端发来的消息 /定义一个1M的内存缓冲区 用于临时性存储接收到的信息 byte arrRecMsg = new byte1024 * 1024; /将客户端套接字接收到的数据存入内存缓冲区, 并获取其长度 int length = socketClient.Receive(arrRecMsg); /将套接字获取到的字节数组转换为人可以看懂的字符

10、串 string strRecMsg = Encoding.UTF8.GetString(arrRecMsg, 0, length); /将发送的信息追加到聊天内容文本框中 / txtMsg.AppendText(服务器: + GetCurrentTime() + rn + strRecMsg + rn); txtMsg.AppendText( strRecMsg ); / 发送字符串信息到服务端的方法 / / 发送的字符串信息 private void ClientSendMsg(string sendMsg) /将输入的内容字符串转换为机器可以识别的字节数组 byte arrClientS

11、endMsg = Encoding.UTF8.GetBytes(sendMsg); /调用客户端套接字发送字节数组 socketClient.Send(arrClientSendMsg); /将发送的信息追加到聊天内容文本框中 / txtMsg.AppendText(niechen.Text + GetCurrentTime() + rn + sendMsg + rn); private void btnSend_Click(object sender, EventArgs e) if (niechen.Text = ) niechen.Text = 游客; /调用ClientSendMsg方

12、法 将文本框中输入的信息发送给服务端 ClientSendMsg(niechen.Text + GetCurrentTime() + rn + txtCMsg.Text.Trim() + rn); txtCMsg.Text = ; txtCMsg.Focus(); /快捷键 Enter发送信息 private void txtCMsg_KeyDown(object sender, KeyEventArgs e) /当光标位于文本框时 如果用户按下了键盘上的Enter键 if (e.KeyCode = Keys.Enter) /则调用客户端向服务端发送信息的方法 ClientSendMsg(tx

13、tCMsg.Text.Trim(); / 获取当前系统时间的方法 / / 当前时间 private DateTime GetCurrentTime() DateTime currentTime = new DateTime(); currentTime = DateTime.Now; return currentTime; private void button1_Click(object sender, EventArgs e) this.Hide(); FServer f = new FServer(); f.ShowDialog(); /发送文件/* string strFile=; b

14、ool isFile = false; bool ready = false; TcpClient client = new TcpClient(txtIP.Text, 8000); /TcpListener listener = new TcpListener(8000); /Socket s = listener.AcceptSocket(); static Int32 port = 13000; static IPAddress localAddr = IPAddress.Parse(127.0.0.1); static TcpListener tcpListener = new TcpListener(localAddr, port); Socket s = tcpListener.AcceptSocket(); private void SendFile() if (strFile != )/strFile是全局变量,用于保存发送发的文件路径 /发送传送文件请求 isFile = true;/is

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

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