第一范文网 - 专业文章范例文档资料分享平台

上海大学 计算机网络 实验报告

来源:用户分享 时间:2025/12/6 8:09:44 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

页眉 private byte[] _receiveData = new byte[1024]; private string _username; private string _password; private bool _needPasswordl; private bool _passwordWrong; public TcpServerForm() {

InitializeComponent(); }

private void TcpReceiveForm_Load(object sender, EventArgs e) {

IPAddress[] addressList = Dns.GetHostAddresses(Dns.GetHostName()); foreach (IPAddress ip in addressList) {

if (ip.ToString().Length <= 15)

lbNativeIP.Items.Insert(0, ip.ToString()); }

btnDisconnect.Enabled = false; }

private void btnListen_Click(object sender, EventArgs e) {

_username = txtUserName.Text;

_password = txtPassword.Text; //设置用户名与密码

_server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//新建协议为tcp的socket

_server.Bind(new IPEndPoint(IPAddress.Any, 8000));//监听端口为8000 _server.Listen(5);//开始监听

_server.BeginAccept(new AsyncCallback(AcceptedConnection), _server);//异步调用,开始接收连接

this.lblStatus.Text = \开始监听...\;

9 / 22

页眉 btnListen.Enabled = false; txtUserName.Enabled = false; txtPassword.Enabled = false; _needPasswordl = true;

_passwordWrong = false;//处理逻辑 }

private void btnDisconnect_Click(object sender, EventArgs e) {

_client.Close(); _needPasswordl = true;

_server.BeginAccept(new AsyncCallback(AcceptedConnection), _server); this.lblStatus.Text = \开始监听...\; }

void AcceptedConnection(IAsyncResult iar) {

_client = ((Socket)iar.AsyncState).EndAccept(iar);//终止接收连接

this.lblStatus.Text = \连接到:\ + _client.RemoteEndPoint.ToString();//解析对方地址与端口 byte[] sendMessage = Encoding.Default.GetBytes(DateTime.Now.TimeOfDay + \请发送用户与密码\);//向客户端提出发送密码的请求

lbConnectLog.Items.Insert(0, \连接到:\ + _client.RemoteEndPoint.ToString()); _client.BeginSend(sendMessage, 0, sendMessage.Length, SocketFlags.None, new AsyncCallback(SentData), _client);//异步调用,消息发送完毕执行SentData btnDisconnect.Enabled = true; }

void ReceivedData(IAsyncResult iar) {

_client = (Socket)iar.AsyncState; int recv = 0; try {

10 / 22

页眉 recv = _client.EndReceive(iar); } catch {

ProcessDisconnection(); }//解析消息

if (recv == 0)//解析失败 {

_client.Close();

this.lblStatus.Text = \等待连接...\;

_server.BeginAccept(new AsyncCallback(AcceptedConnection), _server); return; }

string receiveMessage = Encoding.Default.GetString(_receiveData, 0, recv); this.lbMessage.Items.Insert(0,receiveMessage);//将消息放入消息列表 byte[] feedbackMessage; if(_needPasswordl) {

string receiveUsername = receiveMessage.Substring(receiveMessage.LastIndexOf(\) + 1, receiveMessage.IndexOf(\) - (receiveMessage.LastIndexOf(\) + 1));

string receivePassword = receiveMessage.Substring(receiveMessage.IndexOf(\) + 1, receiveMessage.Length - (receiveMessage.IndexOf(\) + 1)); if(receiveUsername == _username && receivePassword == _password) {

_needPasswordl = false; _passwordWrong = false;

feedbackMessage = Encoding.Default.GetBytes(DateTime.Now.TimeOfDay + \验证成功_\ + receiveMessage);

_client.BeginSend(feedbackMessage, 0, feedbackMessage.Length, SocketFlags.None, new AsyncCallback(SentData), _client);

11 / 22

页眉 return; } else {

this.lbConnectLog.Items.Insert(0, receiveUsername + \ + receivePassword + \验证失败\); feedbackMessage = Encoding.Default.GetBytes(DateTime.Now.TimeOfDay + \验证失败_\ + receiveMessage); _passwordWrong = true;

_client.BeginSend(feedbackMessage, 0, feedbackMessage.Length, SocketFlags.None, new AsyncCallback(SentData), _client); return; } }

feedbackMessage = Encoding.Default.GetBytes(DateTime.Now.TimeOfDay + \成功接收\ + receiveMessage);

_client.BeginSend(feedbackMessage, 0, feedbackMessage.Length, SocketFlags.None, new AsyncCallback(SentData), _client); }

void SentData(IAsyncResult iar) {

_client = (Socket)iar.AsyncState; int sent = _client.EndSend(iar); if (_passwordWrong) {

lbConnectLog.Items.Insert(0, \主动断开连接\ + _client.RemoteEndPoint.ToString()); _client.Close(); _needPasswordl = true;

_server.BeginAccept(new AsyncCallback(AcceptedConnection), _server);//重新开始接收新的连接

ProcessDisconnection();

12 / 22

搜索更多关于: 上海大学 计算机网络 实验报告 的文档
上海大学 计算机网络 实验报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c8xpve2suua7d82u9zjlx7yogl1itcy00ire_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top