聊天室客户端

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

namespace socket
{
public partial class 客户端 : Form
{
public 客户端()
{
InitializeComponent();
TextBox.CheckForIllegalCrossThreadCalls = false;
}

Socket socketClient;

//连接服务器
private void button1_Click(object sender, EventArgs e)
{
socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress address = IPAddress.Parse(textBox1.Text);
IPEndPoint endpoint = new IPEndPoint(address, int.Parse(textBox2.Text));
//向指定的IP和端口发送连接请求
try
{
socketClient.Connect(endpoint);
}
catch (SocketException ex)
{
textBox3.AppendText("异常:"+ex.Message+"\r\n");
return;

}
textBox3.AppendText("连接服务器成功!\r\n");
//定义一个接收用的缓冲区
Thread threadWatch = new Thread(receive);
threadWatch.IsBackground = true;
threadWatch.Start();
}
void receive()
{
while (true)
{
byte[] msg = new byte[1024 * 1024 * 2];
//接收到的信息的长度
int length=-1;
try
{
length = socketClient.Receive(msg);
}
catch (Exception ex)
{
textBox3.AppendText("异常:" + ex.Message + "\r\n");
return;

}
//在客户端显示
textBox3.AppendText("接收数据:"+System.Text.Encoding.UTF8.GetString(msg, 0, length)+"\r\n");
}
}

private void button2_Click(object sender, EventArgs e)
{
//发送文字
//将要发送的字符串转成utf8对应的字节数组
byte[] message = System.Text.Encoding.UTF8.GetBytes(textBox4.Text);
byte[] message1=new byte[message.Length+1];
message1[0] = 0;//代表发送的是文字
Buffer.BlockCopy(message,0,message1,1,message.Length);
try
{
socketClient.Send(message1);
}
catch (SocketException ex)
{
textBox3.AppendText("异常:" + ex.Message + "\r\n");
return;
}
catch (Exception ex)
{
textBox3.AppendText("异常:" + ex.Message + "\r\n");
return;
}
textBox3.AppendText("发送数据:" + textBox4.Text + "\r\n");
}

private void button3_Click(object sender, EventArgs e)
{
//选择要发送的文件
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
textBox5.Text =ofd.FileName;
}
}

private void button4_Click(object sender, EventArgs e)
{
//发送文件
try
{
using (FileStream fs = new FileStream(textBox5.Text, FileMode.Open))
{
byte[] arr = new byte[1024 * 1024 * 2];
//将文件数据读到数组arr中,并获得读取的真实数据长度length
int length = fs.Read(arr, 0, arr.Length);
byte[] arr2 = new byte[length + 1];
arr2[0] = 1; //代表发送的是文件数组
//将arr数组里的元素从第0个开始拷贝,拷贝到arr2数组中,从第一个位置开始存放,一共拷贝length个数据
Buffer.BlockCopy(arr, 0, arr2, 1, length);
//放松包含标识位的新数据组到服务端
socketClient.Send(arr2);
}
}
catch (Exception ex)
{
textBox3.AppendText("异常:" + ex.Message + "\r\n");
}
}
}
}

 

posted @ 2012-02-22 18:00  zwjyx_  阅读(266)  评论(0编辑  收藏  举报