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