TCP 传递信息

什么是socket?

Socket就是套接字。客户端与服务器之间通信用的。
Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发
TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。

以下是试验代码:

(vs2005/xp试验通过)

一个服务器端与客户端交互,实现客户端与服务器端的传递信息。

一个服务器端与两个客户端交互,实现客户端与服务器端的传递信息。

两个服务器端与一个客户端交互,实现客户端与服务器端的传递信息。(第二个服务器报错)

第三个失败主要是在本机上,没有试验是否在多台机子上是否成功。

客户端代码
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using System.Net.Sockets;
 5 using System.IO;
 6 //从字节数组中获取字符串时使用该命名空间中的类
 7 namespace ConsoleApplication3
 8 {
 9     //客户端
10     class Program
11     {
12        //const 关键字用于修改字段或局部变量的声明。
13        //它指定字段或局部变量的值是常数,不能被修改
14         private const int portNum = 13;//服务器端口,可以随意修改 
15         private const string hostName = "127.0.0.1";//服务器地址,127.0.0.1指本机 
16       
17         //由于很多COM在.NET环境下如果使用多线程的话,会导致引用的COM不能正常运行,
18         //而如果不声明程序为STAThread的话,.NET就会自动使用多线程来提高效率,
19         //这样就会导致不可预知的后果。
20         [STAThread]
21         static void Main(string[] args)
22         {
23             try
24             {
25                 Console.Write("我是客户端,我试着去连接主机 " + hostName + "端口号是:" + portNum.ToString() + "\r\n");
26                //创建一个客户端
27                 TcpClient client = new TcpClient(hostName, portNum);//客户端程序类的实现
28                 
29                 NetworkStream ns = client.GetStream();//获取数据流
30                 
31                 //
32                    byte[] byteTime1 = Encoding.UTF32.GetBytes("我是客户器端");            
33                
34                     ns.Write(byteTime1,0, byteTime1.Length);
35                 //
36             
37                 //注意,当使用主机名和端口号初始化TcpClient类的实例时,直到跟服务器建立了连接,
38                 //个实例才算真正建立,程序才能往下执行。如果因为网络不通,服务器不存在,
39                 //服务器端口未开放等等原因而不能连接,程序将抛出异常并且中断执行。
40 
41                 //建立数据流之后,我们可以使用NetworkStream类的Read()方法从流中读取数据,
42                 //使用Write()方法向流中写入数据。读取数据时,首先应该建立一个缓冲区,
43                 //具体的说,就是建立一个byte型的数组用来存放从流中读取的数据。Read()方法的原型描述如下:                
44                
45                 //读取流里面的数据
46                 byte[] bytes = new byte[1024];
47                 int bytesRead = ns.Read(bytes,0, bytes.Length);
48                
49                 Console.WriteLine(Encoding.UTF32.GetString(bytes, 0, bytesRead).ToString());
50                 Console.WriteLine("获取数据流成功。。。");
51                 client.Close();
52                 Console.ReadLine();//由于是控制台程序,故为了清楚的看到结果,可以加上这句 
53              
54 
55             }
56             catch (Exception e)
57             {
58                 Console.WriteLine(e.ToString());
59             }
60         }
61 
62 
63 
64     }
65 
66 }
67 

 

//服务器端
 1 using System;
 2 using System.Net.Sockets;
 3 using System.Text;
 4 using System.Net;
 5 using System.IO;
 6 
 7 //服务器端
 8 namespace ConsoleApplication4
 9 {
10     class Program
11     {
12         private const int portNum = 13;//端口号
13 
14         [STAThread]
15         static void Main(string[] args)
16         {
17             bool done = false;
18             // 首先我们使用端口初始化一个TcpListener实例,并且开始在13端口监听:
19             TcpListener listener = new TcpListener(portNum);//监听客户端
20             listener.Start();
21             while (!done)//循环监听客户端
22             {
23                 //如果有未处理的连接请求,使用AcceptTcpClient方法进行处理,并且获取数据流:
24                 Console.Write("我是服务器端,我在等待连接...");
25                 TcpClient client = listener.AcceptTcpClient();
26 
27               // 然后,获取本机时间,并保存在字节数组中,使用NetworkStream.Write()方法写入数据流,
28               //然后客户端就可以通过Read()方法从数据流中获取这段信息: 
29                 Console.WriteLine("连接成功.");
30                 NetworkStream ns = client.GetStream();
31                
32                 //获取客户端的数据
33                 byte[] bytes = new byte[1024];
34                 int bytesRead = ns.Read(bytes, 0, bytes.Length);
35 
36                 Console.WriteLine(Encoding.UTF32.GetString(bytes, 0, bytesRead).ToString());
37                 Console.WriteLine("获取数据流成功。。。");
38 
39                 //
40 
41                 byte[] byteTime1 = Encoding.UTF32.GetBytes("我是服务器端");            
42                 try
43                 {
44                     ns.Write(byteTime1,0, byteTime1.Length);//服务器端通过Write写到数据流里面
45                     //------
46                     //这时候客户端就可以从数据流里面读数据流
47                     //----
48                     //关闭流
49                     ns.Close();
50                     //
51                   
52                     client.Close();
53                 }
54                 catch (Exception e)
55                 {
56                     Console.WriteLine(e.ToString());
57                 }
58             }
59 
60             listener.Stop();
61         }
62 
63 
64 
65     }
66 }
67 
原文地址:https://www.cnblogs.com/muer/p/1737414.html