本帖最后由 穆玉明 于 2013-6-16 23:32 编辑
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;
namespace 客户端
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Thread threadClient = null;//负责监听客户端的连接请求的线程
Socket socketClient = null;//负责监听的套接字
Dictionary<string, Socket> dict = new Dictionary<string, Socket>();
//客户端发送连接请求到服务器
private void button1_Click(object sender, EventArgs e)
{
//从文本中拿ip并转化成文本对象
IPAddress address = IPAddress.Parse(textBox1.Text.Trim());
//获得网络端口号并放到一个节点里
IPEndPoint endpoint = new IPEndPoint(address, int.Parse(textBox2.Text.Trim()));
//创建客户端套接字
Socket socketClient = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//向指定的ip和端口发送连接请求
socketClient.Connect(endpoint);
//定义一个接收用的缓存区【2兆字节数组】
byte[] arrMsgRec = new byte[1024 * 1024 * 2];
//将接收到的数据存入arrMsgRec数组,并返回真正接收到的数据的长度
int length = socketClient.Receive(arrMsgRec);
//此时是将数组的所有的元素都转成字符串,而真正接收到的只有服务端发来的几个字符
string strMsgRec = System.Text.Encoding.UTF8.GetString(arrMsgRec, 0, length);//从第0个字符开始转,长度为length
ShowMsg(strMsgRec);
//客户端创建线程监听服务端发来的消息
threadClient = new Thread(RecMsg);
threadClient.IsBackground = true;
threadClient.Start();
}
/// <summary>
/// 监听服务器发来的消息
/// </summary>
void RecMsg()
{
while (true)
{
//定义一个接收用的缓存区【2兆字节数组】
byte[] arrMsgRec = new byte[1024 * 1024 * 2];
//将接收到的数据存入arrMsgRec数组,并返回真正接收到的数据的长度
int length = socketClient.Receive(arrMsgRec);
//此时是将数组的所有的元素都转成字符串,而真正接收到的只有服务端发来的几个字符
string strMsgRec = System.Text.Encoding.UTF8.GetString(arrMsgRec, 0, length);//从第0个字符开始转,长度为length
ShowMsg(strMsgRec);
}
}
//向服务器发送文本消息
private void button2_Click(object sender, EventArgs e)
{
string strMsg = textBox4.Text.Trim();
//将字符串转成方便网络传送的二进制数据
byte[] arrMsg = System.Text.Encoding.UTF8.GetBytes(strMsg);
socketClient.Send(arrMsg); 程序是在这出错的,错误是未将对象引用设置到对象的实例。我该怎么改
ShowMsg("我说:"+strMsg);
}
void ShowMsg(string msg)
{
textBox3.AppendText(msg+"\r\n");
}
}
}
|