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

来源:互联网 发布:网页淘宝登录电脑版 编辑:程序博客网 时间:2024/05/21 17:27

最近因为课程需要,写了一个简单的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 = '*';        }    }}


 

原创粉丝点击