一、TCP客户端 效果展示

二、准备任务
1.创建画面

2. 创建服务端,与客户端进行相连接

三、控件的分体效果
1.窗体加载
private void Form1_Load(object sender, EventArgs e)
{
System.Diagnostics.Process.Start(@"D:\17_SocketTool\SocketTool.exe");
}
2.声明客户端和线程
public Socket clentsocket;
Thread t1;
3.ListBox 运行过程画面展示
private void AddMsg(string msg)
{
listBox1.BeginInvoke(new Action<string>(str =>
{
listBox1.Items.Add(str);
}), msg);
}
4.链接服务器按钮功能
private void btnstart_Click(object sender, EventArgs e)
{
btnstart.Enabled = false;
btncancel.Enabled = true;
clentsocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
IPAddress iPAddress = IPAddress.Parse(textBox1.Text);
int port=int.Parse(textBox2.Text);
IPEndPoint iPEndPoint=new IPEndPoint(iPAddress, port);
try
{
clentsocket.Connect(iPEndPoint);
AddMsg($"{DateTime.Now.ToString("HH-mm-sss")}链接成功");
}
catch (Exception ex)
{
AddMsg(ex.ToString() );
}
//接收消息
t1 = new Thread(Received);
t1.IsBackground = true;
t1.Start(clentsocket);
}
private void Received(object o)
{
Socket socket=o as Socket;
while(true)
{
byte[]buffer=new byte[1024*1024*2];
int r=socket.Receive(buffer);
if(r==0)
{
return;
}
string msg=Encoding.UTF8.GetString(buffer);
AddMsg(msg);
}
}
5.断开服务器按钮功能
private void btncancel_Click(object sender, EventArgs e)
{
btnstart.Enabled = true;
btncancel.Enabled = false;
if(clentsocket!=null)
{
clentsocket.Shutdown(SocketShutdown.Both );
clentsocket.Close();
t1.Abort();
}
}
6.发送信息功能实现
private void btnsend_Click(object sender, EventArgs e)
{
string msg=textBox3.Text;
byte[]bytes=Encoding.UTF8.GetBytes(msg);
try
{
clentsocket.Send(bytes);
AddMsg("发送成功");
textBox3.Clear();
}catch (Exception ex)
{
throw;
}
}
全部代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Tcp客户端
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public Socket clentsocket;
Thread t1;
private void btnstart_Click(object sender, EventArgs e)
{
btnstart.Enabled = false;
btncancel.Enabled = true;
clentsocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
IPAddress iPAddress = IPAddress.Parse(textBox1.Text);
int port=int.Parse(textBox2.Text);
IPEndPoint iPEndPoint=new IPEndPoint(iPAddress, port);
try
{
clentsocket.Connect(iPEndPoint);
AddMsg($"{DateTime.Now.ToString("HH-mm-sss")}链接成功");
}
catch (Exception ex)
{
AddMsg(ex.ToString() );
}
//接收消息
t1 = new Thread(Received);
t1.IsBackground = true;
t1.Start(clentsocket);
}
private void Received(object o)
{
Socket socket=o as Socket;
while(true)
{
byte[]buffer=new byte[1024*1024*2];
int r=socket.Receive(buffer);
if(r==0)
{
return;
}
string msg=Encoding.UTF8.GetString(buffer);
AddMsg(msg);
}
}
private void btncancel_Click(object sender, EventArgs e)
{
btnstart.Enabled = true;
btncancel.Enabled = false;
if(clentsocket!=null)
{
clentsocket.Shutdown(SocketShutdown.Both );
clentsocket.Close();
t1.Abort();
}
}
private void btnsend_Click(object sender, EventArgs e)
{
string msg=textBox3.Text;
byte[]bytes=Encoding.UTF8.GetBytes(msg);
try
{
clentsocket.Send(bytes);
AddMsg("发送成功");
textBox3.Clear();
}catch (Exception ex)
{
throw;
}
}
private void Form1_Load(object sender, EventArgs e)
{
System.Diagnostics.Process.Start(@"D:\17_SocketTool\SocketTool.exe");
}
private void AddMsg(string msg)
{
listBox1.BeginInvoke(new Action<string>(str =>
{
listBox1.Items.Add(str);
}), msg);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (clentsocket != null)
{
clentsocket.Shutdown(SocketShutdown.Both);
clentsocket.Close();
t1.Abort();
}
}
}
}
四、服务端和客户端的区别
在这里我可能给大家讲的不是很全面,你们则其善者而从之就可以了。
- 服务端就相当于一个大型网络设备, 电脑需要去联网, 同样网络只有被链接了才能被体会他的重要性。
- 服务端和客户端是相互的,要想他们两个构成链接,肯定需要网口ip和端口数据
- 就像你跟你朋友打电话一样,辅助的工具就是手机
客户端只有和服务端链接之后,他们的对话才算有效。
注意: 服务端的链接是 Bind, 客户端是 Connect