1.服务端
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; namespace TcpService { class Server { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { // // TODO: 在此处添加代码以启动应用程序 // int recv;//用于表示客户端发送的信息长度 byte[] data = new byte[1024];//用于缓存客户端所发送的信息,通过socket传递的信息必须为字节数组 IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 8080);//本机预使用的IP和端口 Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); newsock.Bind(ipep);//绑定 newsock.Listen(10);//监听 Console.WriteLine("waiting for a client"); Socket client = newsock.Accept();//当有可用的客户端连接尝试时执行,并返回一个新的socket,用于与客户端之间的通信 IPEndPoint clientip = (IPEndPoint)client.RemoteEndPoint; Console.WriteLine("connect with client:" + clientip.Address + " at port:" + clientip.Port); string welcome = "welcome here!"; data = Encoding.ASCII.GetBytes(welcome); client.Send(data, data.Length, SocketFlags.None);//发送信息 while (true) {//用死循环来不断的从客户端获取信息 data = new byte[1024]; recv = client.Receive(data); Console.WriteLine("recv=" + recv); if (recv == 0)//当信息长度为0,说明客户端连接断开 break; Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); data = data = Encoding.UTF8.GetBytes("send success."); client.Send(data, data.Length, SocketFlags.None); } Console.WriteLine("Disconnected from" + clientip.Address); client.Close(); newsock.Close(); } } }
2.客户端
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; namespace TcpClient { class Client { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { // // TODO: 在此处添加代码以启动应用程序 // byte[] data = new byte[1024]; Socket newclient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); Console.Write("please input the server ip:"); string ipadd = Console.ReadLine(); Console.WriteLine(); Console.Write("please input the server port:"); int port = Convert.ToInt32(Console.ReadLine()); IPEndPoint ie = new IPEndPoint(IPAddress.Parse(ipadd),port);//服务器的IP和端口 try { //因为客户端只是用来向特定的服务器发送信息,所以不需要绑定本机的IP和端口。不需要监听。 newclient.Connect(ie); } catch (SocketException e) { Console.WriteLine("unable to connect to server"); Console.WriteLine(e.ToString()); return; } int recv = newclient.Receive(data); string stringdata = Encoding.ASCII.GetString(data, 0, recv); Console.WriteLine(stringdata); while (true) { string input = Console.ReadLine(); if (input == "exit") break; newclient.Send(Encoding.ASCII.GetBytes(input)); data = new byte[1024]; recv = newclient.Receive(data); stringdata = Encoding.ASCII.GetString(data, 0, recv); Console.WriteLine(stringdata); } Console.WriteLine("disconnect from sercer"); newclient.Shutdown(SocketShutdown.Both); newclient.Close(); } } }