基于Socket通信的BS结构文件服务器客户端的简易程序(1)

最近因为课程需要,写了一个简单的BS的结构的,有客户端服务器的简易程序,但是整体效果不是很理想,不知道为什么在传送数据的过程中会出错,而且偶尔有异常报出。

 

整个软件的思想是:需要一个服务器,为每一个用户维护一个文件目录,用户可以上传和下载文件。再次基础上,我实现了显示在线用户的功能,显示在线用户的功能完成很好,几乎不会出错,用户上线和下线服务器都会通知其他的用户。

 

先给出客户端登录的简易代码:

 

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;
using System.Net.Sockets;

namespace Client
{
    public partial class Login : Form
    {
        IPAddress serverIP = null;
        private int server_port;

        TcpClient tcpClient = null;

        public Login()
        {
            InitializeComponent();
            this.textBox_ip.Text = "10.108.13.27";
            this.textBox_port.Text = "8888";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 检查用户出入的参数是否合法
            string name = textBox1.Text.TrimEnd('\0') ;
            string password = textBox2.Text.TrimEnd('\0');
            if (name == "" || password == ""||textBox_ip.Text==""||textBox_port.Text=="")
            {
                MessageBox.Show("错误的输入参数", "shit");
                return;
            }
            else
            {
                // 用户输入的用户名和密码符合程序要求规范,和服务器进行通信,判断用户是否有权限登录系统
                serverIP = IPAddress.Parse(textBox_ip.Text);
                server_port = int.Parse(textBox_port.Text);
                tcpClient = new TcpClient();
                // 建立和服务器的连接
                tcpClient.Connect(serverIP,server_port);
                if (tcpClient == null)
                {
                    MessageBox.Show("无法连接到服务器,请重试!",
                               "错误",
                               MessageBoxButtons.OK,
                               MessageBoxIcon.Exclamation);
                }
                else
                {
                    //  建立用于访问网络的基本数据流
                    NetworkStream netStream = tcpClient.GetStream();
                    byte[] name_byte = Encoding.Unicode.GetBytes(name);
                    byte[] password_byte = Encoding.Unicode.GetBytes(password);
                    // 分别给服务器发送用户名和密码
                    netStream.Write(name_byte,0,name_byte.Length);
                    netStream.Flush();
                    byte[] test = new byte[2];
                    netStream.Read(test, 0, test.Length);
                    netStream.Flush();

                    netStream.Write(password_byte,0,password_byte.Length);
                    netStream.Flush();

                    // 接受服务器返回的登录反馈
                    byte[] echo_from_server = new byte[100];
                    netStream.Read(echo_from_server,0,echo_from_server.Length);
                    string echo_string = Encoding.Unicode.GetString(echo_from_server).TrimEnd('\0');
                    // 用equals,不用==判断字符串
                    if (echo_string.Equals("failed"))
                    {
                        MessageBox.Show("用户名密码错误,请重新填写",
                                   "提示",
                                   MessageBoxButtons.OK,
                                   MessageBoxIcon.Information);
                        this.textBox1.Text = "";
                        this.textBox2.Text = "";
                        this.tcpClient = null;
                        return;
                    }
                    else if(echo_string.Equals("success"))
                    {
                        // 允许用户登录
                        MessageBox.Show("登录成功");
                        MainForm mainForm = new MainForm(name, netStream);
                        mainForm.Owner = this;
                        this.Hide();
                        mainForm.Show();
                    }
                }
            }
        }

        private void Login_Load(object sender, EventArgs e)
        {
            //
            //this.textBox2.PasswordChar = '*';
        }
    }
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值