TCPListener和TCPClient之间的通信代码

《服务端》

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方法来读和取数据

时间: 2024-10-25 16:00:59

TCPListener和TCPClient之间的通信代码的相关文章

线程之间的通信

1.1.线程之间的通信方法 多个线程在处理统一资源,但是任务却不同,这时候就需要线程间通信.    等待/唤醒机制涉及的方法:    1. wait():让线程处于冻结状态,被wait的线程会被存储到线程池中.    2. notify():唤醒线程池中的一个线程(任何一个都有可能).    3. notifyAll():唤醒线程池中的所有线程.  备注    1.这些方法都必须定义在同步中,因为这些方法是用于操作线程状态的方法.    2.必须要明确到底操作的是哪个锁上的线程!    3.wa

Android - Fragment (三)不同Fragment之间的通信

在Fragment的java文件中,可以使用getActivity()来获得调用它的activity, 然后再找到另一个Fragment,进行通信 getActivity().getFragmentManager().findFragmentById(R.id.fragment_list); 但这样做耦合度太高,不方便后续的修改操作 Fragment与其附着的Activity之间的通信,都应该由Activity来完成 不能是多个Fragment之间直接通信 Fragment与其附着的Activi

两个页面之间的通信

今天要给大家说的是两个不同页面之间的通信,通过一个拖拽demo来模拟: 首先,写好基础的拖拽代码: <script> window.onload = function() { var oDiv = document.getElementById('div'); oDiv.onmousedown = function(ev) { var ev = window.event || ev; var disX = ev.clientX - oDiv.offsetLeft; var disY = ev.

多线程之间的通信实例讲解

                 多线程之间的通信实例讲解对于线程来说,说白了,就是一个函数,如果大家对于这章函数都有理解,那我对于操作系统,线程和进程间的通信会有一个新的认识!接下来我会对每一行代码进行注释,在此过程中,大家也可以对c语言有一个崭新的认识. 第一个函数,创建两个线程. #include <stdio.h>#include <pthread.h>    这个头函数要包含,因为我们后续用的函数都是系统调用,因此需要申请头函数   这样在编译的时候,就可以找到此函数的源

多线程之间的通信(等待唤醒机制、Lock 及其它线程的方法)

一.多线程之间的通信. 就是多个线程在操作同一份数据, 但是操作的方法不同. 如: 对于同一个存储块,其中有两个存储位:name   sex, 现有两个线程,一个向其中存放数据,一个打印其中的数据. 为了解决上述问题中的安全问题(在存放线程进行存放操作的时候, 打印线程不能对共有数据进行操作),所以应当对两个线程       操作共有数据的代码部分进行同步(使用synchronized(),来进行同步, 注意 :使用同一个对象作为同步锁. 二.等待唤醒机制. 在上述案例实现过后运行,会发现:打印

AngularJS 中 Controller 之间的通信

用 Angular 进行开发,基本上都会遇到 Controller 之间通信的问题,本文对此进行一个总结. 在 Angular 中,Controller 之间通信的方式主要有三种: 1)作用域继承.利用子 Controller 控制父 Controller 上的数据.(父 Controller 中的数据要为引用类型,不能是基本类型,原因参见 AngularJS中的作用域 一文) 2)注入服务.把需要共享的数据注册为一个 service,在需要的 Controller 中注入. 3)基于事件.利用

VC中利用多线程技术实现线程之间的通信

文章来源:[url]http://www.programfan.com/article/showarticle.asp?id=2951[/url] 当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的.

Fragment的生命周期和Activity之间的通信以及使用

Fragment通俗来讲就是碎片,不能单独存在,意思就是说必须依附于Activity,一般来说有两种方式把Fragment加到Activity,分为静态,动态. 静态即为右键单击,建立一个Fragment,选择Blank,在Activity布局中直接加fragment,name属性直接指向之前建立的Fragment,这就添加上了Fragment,这种较为简单. 动态: 我们要做的是在Activity中添加一个Fragment,Fragment中有两个按钮,当按下按钮时分别切换不同的Fragmen

c# IPC实现本机进程之间的通信

IPC可以实现本地进程之间通信.这种用法不是太常见,常见的替代方案是使用wcf,remoting,web service,socket(tcp/pipe/...)等其他分布式部署方案来替代进程之间的通信.虽然不常见但也避免不了一些场景会使用该方案. 应用包含: 1)使用IPC技术实现多client与一个sever通信(不过是本机,感觉意义不大,但如果想实现本机上运行确实是一个不错的方案): 2)使用IPC技术实现订阅者和生产者分离时,一个server接收并消费消息,客户端是生产消息的. 1 1: