最大的特点在于开启了两个线程专门执行接收消息和发送消息,从而实现任意通信
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace TcpClient
{
class Program
{
private static Socket TcpClient;
static void Main(string[] args)
{
//建立一个套接字(Socket)
Console.WriteLine("客户端Tcp连接模式");
TcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//利用Connect()方法与服务器建立连接
IPAddress ipaddress = IPAddress.Parse("192.168.1.4");
EndPoint point = new IPEndPoint(ipaddress, 7788);
TcpClient.Connect(point); //通过ip+端口号定位一个要连接的服务器
//利用Recive()方法接受来自建立连接的主机的消息(可靠连接)
new Thread(ReceiveMessage) {IsBackground=false }.Start();
new Thread(SendMessage) {IsBackground = false }.Start();
Console.ReadKey();
}
static void ReceiveMessage()
{
while (true)
{
//接收服务器端信息
try
{
byte[] data = new byte[1024];
int length = TcpClient.Receive(data); //这里传递一个byte数组,实际上这个data数组用来接收数据
//lebgth返回值表示接受了多少字节的数据
string message = Encoding.UTF8.GetString(data, 0, length); //只把接收到的数据做一个转化
Console.WriteLine(message);
}
catch (System.Net.Sockets.SocketException)
{
}
}
}
static void SendMessage()
{
while (true)
{
//向服务器端发送信息
try
{
string message2 = Console.ReadLine();//读取用户输入,并发送到服务器端
TcpClient.Send(Encoding.UTF8.GetBytes(message2));//将字符串转化成字节数组并发送到服务器端
}
catch (System.Net.Sockets.SocketException)
{
}
}
}
}
}