------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
客户端的socket
1.必须制定要连接的服务端地址和接口
2.通过创建一个socket对象来初始化一个到服务器端的TCP连接。
System.Net 命名空间为当前网络上使用的多种协议提供了简单的编程接口。
System.Net.Sockets 命名空间为需要严密控制网络访问的开发人员提供了 Windows Sockets (Winsock) 接口的托管实现。
所以要先添加这两个命名空间。
public Form1()
{
InitializeComponent();
TextBox.CheckForIllegalCrossThreadCalls = false;//关闭微软对跨线程的检查
}
Thread threadClient = null;
private void textBox3_TextChanged(object sender, EventArgs e)
{
}
Socket socketClient = null;
private void btnConnect_Click(object sender, EventArgs e)
{
// 获得文本框中的IP地址对象
IPAddress address = IPAddress.Parse(txtIP.Text.Trim());
//创建包含IP和Port的网络节点对象
IPEndPoint endpoint = new IPEndPoint(address, int.Parse(txtPort.Text.Trim()));
//创建服务端负责监听的套接字,参数(使用IP4寻址协议,使用流式连接,使用TCP协议传输数据。
socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 将负责监听的套接字绑定到唯一的IP和端口上
socketClient.Connect(endpoint);
//线程化
threadClient = new Thread(RecMsg);
threadClient.IsBackground = true;
threadClient.Start();
//byte[]arrMsgRec=new byte[1024*1024*2];
//socketClient.Receive(arrMsgRec);
//string strMsgRec = System.Text.Encoding.UTF8.GetString(arrMsgRec);
//ShowMsg(strMsgRec);
}
void RecMsg()
{
while (true)
{ //定义一个接受用的缓存区、(2M)
byte[] arrMsgRec = new byte[1024 * 1024 * 2];
// 将接收到的数据存入arrMsgRec数组中
int length=socketClient.Receive(arrMsgRec);
//此时是将数组所有的元素都转化成字符串,而真正接受的只有几个字符而已。
string strMsgRec = System.Text.Encoding.UTF8.GetString(arrMsgRec,0,length);
ShowMsg(strMsgRec);
}
}
//向服务器发送文本消息
private void btnSendMsg_Click(object sender, EventArgs e)
{
string strMsg = txtMsgSend.Text.Trim();
//将字符串转成方便网络传送的二进制数据
byte[] arrMsg = System.Text.Encoding.UTF8.GetBytes(strMsg);
byte[] arrMsgSend = new byte[arrMsg.Length + 1];
arrMsgSend[0] = 0;//设置标识位,0代表发送的是消息
Buffer.BlockCopy(arrMsg, 0, arrMsgSend, 1, arrMsg.Length);
socketClient.Send(arrMsgSend);
ShowMsg("我说:" + strMsg);
}
#region 在窗体文本框中显示消息--void ShowMsg
void ShowMsg(string msg)
{
txtMsg.AppendText(msg + "\r\n");
}
#endregion
#region 选择要发送的文件--void btnChooseFile_Click
//选择要发送的文件
private void btnChooseFile_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
txtFilePath.Text = ofd.FileName;
}
}
#endregion
//向服务端发送文件
private void btnSendFile_Click(object sender, EventArgs e)
{
//用文件流打开用户选择的文件
using (FileStream fs = new FileStream(txtFilePath.Text, FileMode.Open))
{
byte[] arrFile = new byte[1024 * 1024 * 2];//定义一个2兆的数组缓存区
//将文件数据读到数组arrFile中,并获得读取的真实数据长度
int length=fs.Read(arrFile, 0, arrFile.Length);
byte[] arrFileSend = new byte[length + 1];
arrFileSend[0] = 1;//代表发送的是文件
//for (int i=0;i<length;i++)
//{
// arrFileSend[i + 1] = arrFile[i];
//}
//将arrFile中的元素从0开始拷贝到arrFileSend中的第一个位置开始存放,存放length个元素。
Buffer.BlockCopy(arrFile, 0, arrFileSend, 1, length);
//发送包含了标识位的新数据数组到服务端。
socketClient.Send(arrFileSend);
// 完全拷贝 arrFile.CopyTo(arrFileSend, length);
}
}
------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------