黑马程序员--套接之局域网聊天客户端(待续)
来源:互联网 发布:如何卖照片知乎 编辑:程序博客网 时间:2024/05/21 09:26
------- 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培训、期待与您交流! -------
- 黑马程序员--套接之局域网聊天客户端(待续)
- 黑马程序员--套接之局域网聊天服务端(待续)
- loading黑马程序员之网络编程:聊天(3-1)
- 黑马程序员 java之DOS 聊天
- 黑马程序员_客户端聊天软件(网络编程、GUI、线程等)
- 黑马程序员-Java基础综合练习:简易聊天客户端
- Java局域网聊天系统(服务器客户端一对一)
- 一个程序员的局域网聊天
- 黑马程序员--Socket(套接字)
- 黑马程序员--套接字
- 局域网聊天(UDP)
- 局域网聊天系统__6.客户端框架实现
- 黑马程序员_网络编程之套接字
- VB学习之局域网聊天
- QT之局域网聊天实现
- Java之局域网通信聊天
- 黑马程序员_网络编程之客户端
- java39.Socket通信------使用 Java 创建聊天客户端(未完待续。。。)
- 10 Essentials for developing commercial Flex 4.5.1 mobile applications
- matlab EM算法
- 正则表达式入门教程
- 输入子系统读书笔记
- 我常用的putty配置选项
- 黑马程序员--套接之局域网聊天客户端(待续)
- 黑马程序员——线程间通信_等待唤醒机制
- 对输入子系统分析总结
- Java环境变量设置
- map函数剖析
- getWidth()和getMeasuredWidth()
- 做事情需要搞清楚的几个顺序
- WCF行为
- Spirng MVC拦截器的应用