《服务端》

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading.Tasks;

namespace TCPListener_服务端
{
class Program
{
static void Main(string[] args)
{
//1.创建Socket对象并绑定IP和端口号
TcpListener listener = new TcpListener(IPAddress.Parse("211.148.100.178"), 7788); //这个TcpListener是将Socket创建对象的方式封装起来存储在这个类中
//2.开始监听
listener.Start(100);
//3.等待客户端连接过来
TcpClient client = listener.AcceptTcpClient();
//4.取得客户端发送过来的数据
NetworkStream stream = client.GetStream(); //用于接受和发送数据,得到一个网络流,通过这个网络流来接受和发送数据
//5.读取接收到的数据
byte[] data = new byte[1024]; //5.2.创建一个容器用于接受数据并传入到第一步的第一个位置的参数
//8.将我们需要读数据和输出数据的代码放入一个死循环中去
while (true)
{
int length = stream.Read(data, 0, 1024); //5.1.建立读数据,需要传入三个参数和一个返回值。容器、从哪个位置开始、读取的最大数据、返回值为实际读取的参数
//6.输出接收到的这个数据
string message = Encoding.UTF8.GetString(data, 0, length); //1.先将接收到的数据转化可输出的字符串类型
Console.WriteLine("收到消息:" + message); //2.输出收到的信息
}

//7.输出完数据以后我们需要释放这些数据
stream.Close(); //1.先释放流的数据
client.Close(); //2.再释放客户端的连接数据
listener.Stop(); //3.关闭监听
Console.ReadKey();
}
}
}

《客户端》

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;

namespace TCPClient_客户端
{
class Program
{
static void Main(string[] args)
{
//1.创建Socket对象并且绑定IP和端口号
TcpClient client = new TcpClient("211.148.100.178", 7788);

//2.创建网络流和服务端形成交换
NetworkStream stream = client.GetStream();

//5.将3步骤写入一个死循环中可以让用户重复输入需要的信息
while (true)
{
//3.然后写入需要交换的数据
string message = Console.ReadLine(); //2.这里是接受用户在客户端中输入的一段字符串
byte[] data = Encoding.UTF8.GetBytes(message); //3.这个方法就是讲输入的字符串转化到能够写入的byte类型
stream.Write(data, 0, data.Length); //1.这里是写入需要传递给服务端的数据,第一个参数是传入的字符数组,第二个是从哪个开始的偏移量,第三个是写入的数据大小长度
}

//4.关闭流
stream.Close();
client.Close();
Console.ReadKey();
}
}
}

他们都是基于NetworkStream类然后通过stream流通信然后 通过read和write方法来读和取数据

posted on 2017-05-14 12:15  春天里的麦子  阅读(6205)  评论(2编辑  收藏  举报