简单设计窗体
图中方框是一个隐藏的Textbox控件,用于显示对客户端的连接信息
客户端代码
定义socket全局变量
Socket socketSend;
连接按钮事件
//连接服务端
private void button1_Click(object sender, EventArgs e)
{
//创建一个socket对象并设置其寻址方案为内网,套接字类型为Strem流,协议类型为TCP
socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//将网络端点表示成ip地址和端口,ip地址为服务器的地址,这里为本机地址,端口号随便填,不建议填写专用端口号
IPEndPoint point = new IPEndPoint(IPAddress.Parse("47.122.49.231"), 8500);
//连接服务器
socketSend.Connect(point);
showMsg("连接成功");
Control.CheckForIllegalCrossThreadCalls = false;
//创建线程
Thread th = new Thread(Recevice);
//将线程至于后台运行
th.IsBackground = true;
//开始运行线程
th.Start();
}
客户端接收服务端发送的消息
//客户端接收服务端发送的消息
void Recevice()
{
//使用try...catch语句接收消息
try
{
//将客户端一直置于接收信息
while (true)
{
//定义字节数组,用于缓存接收的信息,自定义大小
byte[] buffer = new byte[1024 * 1024 * 2];
//如果位接收到信息,则跳出循环
int r = socketSend.Receive(buffer);
if (r == 0)
{
break;
}
//如果接收到信息,则将接收到的信息编码成字符串的形式并打印在Textbox控件中
string str = Encoding.UTF8.GetString(buffer, 0, r);
showMsg(socketSend.RemoteEndPoint + ":" + str);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
}
自定义打印函数
void showMsg(string s)
{
textBox1.AppendText(s + "\r\n");
}
客户端向服务器发送消息
//客户端向服务器发送消息
private void button2_Click(object sender, EventArgs e)
{
string str = textBox2.Text;
string str1 = str ;
//将发送的消息编码成字节发送出去
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(str1);
socketSend.Send(buffer);
}
客户端运行结果
服务端见下篇文章