1 TCP的应用编程服务器端重要笔记 2 1. TcpListener类用于侦听和接受传入的连接请求。 3 TcpClient类用于提供本地主机和远程主机的连接信息。 4 2.TcpClient类 5 主要用于编写客户端程序,且需要直接利用构造函数创建TcpClient对象。 6 构造函数有四种重载形式 7 TcpClient() 8 TcpClient(AddressFamily family) 9 TcpClient(IPEndPoint iep) 10 TcpClient(string hostname,int port) 11 (1)TcpClient(): 12 /-------该构造函数创建一个默认的TcpClient对象,并自动分配本机(客户端IP地址和端口号。---------/ 13 TcpClient tcpClient=new TcpClient(); 14 tcpClient.Connect("www.abcd.com", 51888); 15 16 (2)TcpClient(AddressFamily family): 17 /------AddressFamily枚举指定使用哪种网络协议。-------/ 18 TcpClient tcpClient = new TcpClient(AddressFamily.InterNetwork); 19 tcpClient.Connect("www.abcd.com", 51888); 20 21 (3)TcpClient(IPEndPoint iep): 22 /------该构造函数的参数iep指定本机(客户端)IP地址与端口号。当客户端有一个以上的IP地址时,而且程序员希望直接指定使用的IP地址和端口号,可以使用这种方式。如果使用这种方式--------/ 23 IPAddress[] address = Dns.GetHostAddresses(Dns.GetHostName()); 24 IPEndPoint iep = new IPEndPoint(address[0], 51887); 25 TcpClient tcpClient = new TcpClient(iep); 26 tcpClient.Connect("www.abcd.com", 51888); 27 28 (4)TcpClient(string hostname,int port) 29 /------- 这是使用最方便的一种构造函数。参数中的hostname表示要连接到的远程主机的DNS名,port表示要连接到的远程主机的端口号。该构造函数会自动分配最合适的本地主机IP地址和端口号,并对DNS进行解析,然后与远程主机建立连接---------/ 30 TcpClient tcpClient = new TcpClient("www.abcd.com", 51888); 31 32 3.TcpClient对象中的GetString()方法可以获得NetworkStream对象 33 例如:this.client = client; 34 NetworkStream networkStream = client.GetStream(); 35 而在服务器与客户之间的传输数据要用到NetworkStream对象 36 例如: public BinaryReader br; 37 public BinaryWriter bw; 38 br = new BinaryReader(networkStream); /*以上是user类当中的成员变量和构造方法当 39 bw = new BinaryWriter(networkStream); 中的代码*/ 40 String receiveString=null; 41 //这里的user对象是TcpListener对象创建后,调用start()方法和AcceptTcpClient()方法获得连接到服务器的TcpClient的对象,具体操作在TcpListener知识点的时候具体阐述 42 receiveString=user.br.ReadString();//从网络流中读出字符串,此方法会自动判断字符串长度前缀,并根据长度前缀读出字符串 43 44 4.调用string的静态方法Format可以设置输出的格式 45 例如:AddItemToListBox(string.Format("开始在{0}:{1}监听客户连接", localAddress, port)); 46 47 5.String类型的对象的Split()方法可以分解字符串中指定的分割符,分割成几个字符串 48 例如:string [] splitString=receiveString.Split(‘,’)//把receiveString字符串按逗号分离开来全部存入string类型的数组当中 49 例如:string command = message.Split(‘,‘)[0].ToLower();//字符串message以逗号分割成几个子字符串,取第一个子字符串????????????????? 50 51 6.String类的对象的Substring(int i)方法可以提取出下标为i至末尾的子字符串 52 例如:string talkString = receiveString.Substring(splitString[0].Length + splitString[1].Length + 2); 53 54 7.TcpListener对象的创建和使用: 55 TcpListener myListener; 56 myListener = new TcpListener(localAddress, port); 57 myListener.Start();//staty()函数开始监听 58 TcpClient newClient = null; 59 newClient = myListener.AcceptTcpClient();//在服务器中,TcpClient对象必须要用 AcceptTcpClient();方法获取 60 myListener.Stop();//这是停止监听时的代码举例 61 62 8.Thread线程的概念和使用: 63 (1)服务器监听操作需要建立一个线程; 64 (2)服务器在监听操作的线程中,如果有客户端连接则再创建一个线程用于处理与对应用户的交互 65 (3)Thread的使用举例: 66 例如:Thread myThread = new Thread(ListenClientConnect); 67 myThread.Start(); 68 //在上述的使用当中Thread构造方法中的参数ListenClientConnect是一个方法的指针,即方法的名字,若该方法无参数,则如上述所示创建线程 69 例如:Thread threadReceive = new Thread(ReceiveData); 70 threadReceive.Start(user); 71 //这是在ReceiveData中有参数的情况,只能在Start()方法中输入对应的参数
时间: 2024-10-11 08:22:25