tcp udp均可以用来网络通信,在使用之前建议先搜索一下相关网络连接的基本知识,可以更好的理解和使用,tcp建议看下如下文章:https://blog.csdn.net/chuangsun/article/details/67640242,建议多搜一下多看看。
直接上正文。。。。。。。。。。。。。。。
(1)socket类
采用socket类,使用最基本的同步方法。
tcp服务端
using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; namespace net { class Program { static void Main(string[] args) { string host = "127.0.0.1"; IPAddress ip = IPAddress.Parse(host); //定义侦听端口 //IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, 8889); IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, 8889); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Bind(ipEnd); socket.Listen(10); Console.Write("Waiting for a client "); //一旦接受连接,创建一个客户端 Socket client = socket.Accept(); IPEndPoint ipEndClient = (IPEndPoint)client.RemoteEndPoint; Console.Write("已连接:IP: {0} 端口: {1} ", ipEndClient.Address, ipEndClient.Port); while(true) { //接收数据 byte[] recv1 = new byte[1024]; int count1 = client.Receive(recv1); string str = Encoding.ASCII.GetString(recv1, 0, count1); Console.WriteLine("Client:" + Encoding.ASCII.GetString(recv1, 0, count1)); if(str=="exit") { break; } //发送数据 string welcome = "Server received:"+ str; byte[] data = new byte[1024]; data = Encoding.ASCII.GetBytes(welcome); client.Send(data, data.Length, SocketFlags.None); } Thread.Sleep(10000); Console.Write(" 断开连接: {0}", ipEndClient.Address); client.Close(); socket.Close(); Console.ReadKey(); } } }
tcp客户端
using System; using System.Net; using System.Net.Sockets; using System.Collections.Generic; using System.Text; using System.Threading; namespace client { class Program { static void Main(string[] args) { //定义主机的IP及端口 IPAddress ip = IPAddress.Parse("127.0.0.1"); IPEndPoint ipEnd = new IPEndPoint(ip, 8889); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect(ipEnd); while(true) { //发送数据 string msg = Console.ReadLine(); byte[] msgBytes = new byte[1024]; msgBytes = Encoding.ASCII.GetBytes(msg); socket.Send(msgBytes, msgBytes.Length, SocketFlags.None); //接收数据 byte[] recvMsg = new byte[1024]; int count = socket.Receive(recvMsg); string recvStr = Encoding.ASCII.GetString(recvMsg, 0, count); Console.WriteLine(recvStr); if(msg=="exit") { break; } } Thread.Sleep(10000); Console.Write("断开连接"); socket.Shutdown(SocketShutdown.Both); socket.Close(); Console.ReadKey(); } } }
udp服务端:
using System; using System.Text; using System.Net; using System.Net.Sockets; namespace UDP { class Program { static void Main(string[] args) { int recv; byte[] data = new byte[2048]; IPEndPoint ip = new IPEndPoint(IPAddress.Any, 8001); Socket Server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); Server.Bind(ip); Console.WriteLine("Server ready!"); //得到客户机IP //IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); //EndPoint Remote = (EndPoint)(sender); //recv = Server.ReceiveFrom(data, ref Remote); //Console.Write("Message from "+Remote.ToString()+":"); //Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); ////客户机连接成功后,发送信息 //string welcome = "Hello ! "; //data = Encoding.ASCII.GetBytes(welcome); //Server.SendTo(data, data.Length, SocketFlags.None, Remote); while(true) { //得到客户机IP IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint Remote =sender; recv = Server.ReceiveFrom(data, ref Remote); string recvStr = Encoding.ASCII.GetString(data, 0, recv); Console.Write("Message from " + Remote.ToString() + ":"); Console.WriteLine(recvStr); //客户机连接成功后,发送信息 string welcome = "Server received: "+ recvStr; data = Encoding.ASCII.GetBytes(welcome); Server.SendTo(data, data.Length, SocketFlags.None, Remote); } //while (true) //{ // data = new byte[1024]; // //发送接收信息 // recv = Server.ReceiveFrom(data, ref Remote); // Console.Write("Message from " + Remote.ToString() + ":"); // Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); // if (Encoding.ASCII.GetString(data, 0, recv) == "exit") // break; // Server.SendTo(data, recv, SocketFlags.None, Remote); //} //Console.WriteLine("停止"); Server.Close(); Console.ReadKey(); } } }
udp客户端:
using System; using System.Text; using System.Net; using System.Net.Sockets; namespace UDPClient { class Program { static void Main(string[] args) { byte[] data = new byte[1024]; IPEndPoint ip = new IPEndPoint(IPAddress.Parse("192.168.8.15"), 8001); Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); Console.WriteLine("Client ready:"); //string welcome = "Server hello!"; //data = Encoding.ASCII.GetBytes(welcome); //server.SendTo(data, data.Length, SocketFlags.None, ip); //IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); //EndPoint Remote = (EndPoint)sender; //data = new byte[1024]; //int recv = server.ReceiveFrom(data, ref Remote); //Console.Write("Message from "+Remote.ToString()+":"); //Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); while(true) { string welcome = Console.ReadLine(); data = Encoding.ASCII.GetBytes(welcome); server.SendTo(data, data.Length, SocketFlags.None, ip); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint Remote = sender; data = new byte[1024]; int recv = server.ReceiveFrom(data, ref Remote); Console.Write("Message from " + Remote.ToString() + ":"); Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); } //while (true) //{ // input = Console.ReadLine(); // server.SendTo(Encoding.ASCII.GetBytes(input), Remote); // if (input == "exit") // break; // data = new byte[1024]; // recv = server.ReceiveFrom(data, ref Remote); // stringData = Encoding.ASCII.GetString(data, 0, recv); // Console.Write("Message from " + Remote.ToString() + ":"); // Console.WriteLine(stringData); //} Console.WriteLine("停止"); server.Close(); Console.ReadKey(); } } }
(2)TcpClient UdpClient TcpListener类
上述连个类为.NET自封装两个类。
tcp服务端:
using System; using System.Net; using System.Net.Sockets; using System.Text; namespace TcpServerT { class Program { static void Main(string[] args) { //IPAddress IP = IPAddress.Parse("127.0.0.1"); TcpListener listener = new TcpListener(IPAddress.Any, 1234); listener.Start(); Console.WriteLine("开始监听:"); //此处也可以采用socket 接收,可以方便进行socket操作 //Socket s = listener.AcceptSocket(); TcpClient client = listener.AcceptTcpClient();//接受一个Client Console.WriteLine("已连接:"); NetworkStream stream = client.GetStream();//获取网络流 Console.WriteLine("获取连接流:"); string receiveString = ""; while (true) { byte[] buffer = new byte[client.ReceiveBufferSize]; stream.Read(buffer, 0, buffer.Length);//读取网络流中的数据 receiveString = Encoding.Default.GetString(buffer).Trim('