C# TCP与ip通信
一、获取本机的ip地址// 获取本地主机名
string hostName = Dns.GetHostName();
string ip = "127.0.0.1";
//Console.WriteLine("本地主机名: " + hostName);
// 获取本地IP地址
IPAddress[] addresses = Dns.GetHostAddresses(hostName);
Console.WriteLine("本地IPv4地址列表:");
foreach (IPAddress address in addresses)
{
if (address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
//Console.WriteLine(address.ToString());
ip = address.ToString();
}
}
textBox1.Text = ip;
二、服务器端
[*]定义
public Socket ServerSocket;// 套接字 用来监听
public Socket SocketAccept;// 套接字 绑定客户端
public Socket socket;// 套接字 用来通信
[*]开启监听(吸收信息)
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;// 开启后把按钮禁用掉
// 设置通信协议 inter网、可以保证正常通信、通信类型
ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 绑定ip地址
IPAddress ip = IPAddress.Parse(textBox1.Text);
// 创建端口号
int port = 60000;
// 创建端口连接点
IPEndPoint ipEndPoint = new IPEndPoint(ip, port);
// 做一个异常捕获 防止程序卡死
try
{
// 调用
ServerSocket.Bind(ipEndPoint);
// 开启监听 .Listen
ServerSocket.Listen(10);// 监听10个
// 开启监听的线程
Thread t1 = new Thread(ListTen);
t1.IsBackground = true;// 设置后台线程
t1.Start(ServerSocket);
}
catch (Exception ex) { }
}
// 定义调用方法
private void ListTen(object o)
{
SocketAccept = o as Socket;
// 做一个异常捕捉
try
{
while (true)
{
// 线程堵塞 知道连接后执行代码
socket = SocketAccept.Accept();
// 获取用户的客户端ip地址
string ip = socket.RemoteEndPoint.ToString();
Addmsg(ip);
// 会有多个ip连接使用线程用来接收信息
Thread t2 = new Thread(Receive);
t2.IsBackground = true;
t2.Start(socket);
}
}
catch (Exception ex) { }
}
private void Receive(object o)
{
socket = o as Socket;
while (true)
{
// 设置传输的信息大小 2MB
byte[] buffer = new byte;
// 判断客户端是否发送信息
int r = socket.Receive(buffer);
if (r == 0)
{
break;
}
// 转码
String msg = Encoding.Default.GetString(buffer);
// 显示
Addmsg(msg);
}
}
public void Addmsg(string msg)
{
textBox3.BeginInvoke(new Action(() => {
textBox3.Text += $"{msg}";
textBox3.Text += "\r\n";
}));
}
[*]发送信息
// 转码
bytep[] buffer = new byte;
// 把字符串转换为字节进行发送
buffer = Encoding.Default.GetBytes(“Hello word”);
// 发送信息
Socket.Send(buffer);
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]