使用TcpClient的例程

 

例子1:

///假定一切工作正常
///连接后发送一次消息,然后不停接受消息并且打印

主要API说明

TcpClient client=new TcpClient();

client.Connect("127.0.0.1",8888);

NetworkStream stream=client.GetStream();

发送:

stream.Write(outBound, 0, outBound.Length);

接受:在另外一个线程,不停的

stream.Read(recvData, 0, bufSize);
class Program{byte[] recvData = new byte[1024 * 10];TcpClient client = new TcpClient();NetworkStream stream = null;void doWork(){client.Connect("127.0.0.1", 8888);stream = client.GetStream();Thread th = new Thread(recv);th.Start();byte[] outBound = Encoding.ASCII.GetBytes("Hello,this is one client\r\n");stream.Write(outBound, 0, outBound.Length);stream.Flush();}static void Main(string[] args){Program p = new Program();p.doWork();}public void recv(){while (true){int bufSize = client.ReceiveBufferSize;int count=stream.Read(recvData, 0, bufSize);string str = Encoding.ASCII.GetString(recvData, 0, count);Console.WriteLine(str);}}}

 例子2:

使用异步,连接异步,发送异步,接受异步

关键API

注意这三者异步回调 委托类型

 

 以下例子会提示连接失败的情况,连接后,接受到消息就打印。

    class Program{byte[] recvData = new byte[1024 * 10];TcpClient client = new TcpClient();NetworkStream stream = null;void doWork(){Console.WriteLine("preparing to connect in main thread  " + Thread.CurrentThread.ManagedThreadId);client.BeginConnect("127.0.0.1", 8888,ConnectCallBack, client);}static void Main(string[] args){Program p = new Program();p.doWork();Console.Read();}private void ConnectCallBack(IAsyncResult result){Console.WriteLine("well, i am in the connect thread..." + Thread.CurrentThread.ManagedThreadId);TcpClient client = result.AsyncState as TcpClient;try{client.EndConnect(result);}catch (Exception ex){Console.WriteLine("well, seems an error occured...");Console.WriteLine("which is " + ex.ToString());return;}Console.WriteLine("Hooray, it worked.");client.Client.BeginReceive(recvData, 0, recvData.Length,SocketFlags.None, RecvCallBack, client);}public void RecvCallBack(IAsyncResult result){Console.WriteLine("here in recv callback thread.." + Thread.CurrentThread.ManagedThreadId);int count = -1;try{count = client.Client.EndReceive(result);}catch (Exception ex){Console.WriteLine("远程计算机关闭");return;}//an recv is done,display it and continue..string msg = Encoding.ASCII.GetString(recvData, 0, count);Console.WriteLine("your recv this time is:");Console.WriteLine(msg);client.Client.BeginReceive(recvData, 0, recvData.Length, SocketFlags.None, RecvCallBack, client);}}

 

转载于:https://www.cnblogs.com/legion/p/9100347.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20172324 2017-2018-2《程序设计与数据结构》实验三报告

20172324 2017-2018-2《程序设计与数据结构》实验三报告 课程:《程序设计与数据结构》 班级: 1723 姓名: 曾程 学号:20172324 实验教师:王志强 实验日期:2018年5月23日 必修/选修: 必修 一、实验…

mysql if--else

SQL之case when then用法 case具有两种格式。简单case函数和case搜索函数。 --简单case函数 case sexwhen 1 then 男when 2 then 女’else 其他 end --case搜索函数 case when sex 1 then 男when sex 2 then 女else 其他 end 这两种方式,可以实现相同的功能。简…

笔记41 Spring Web Flow——Demo

订购披萨的应用整体比较比较复杂,现拿出其中一个简化版的流程:即用户访问首页,然后输入电话号(假定未注册)后跳转到注册页面,注册完成后跳转到配送区域检查页面,最后再跳转回首页。通过这个简单…

CSS3弹性盒子Flex

CSS3弹性盒子Flex 基础知识和术语 原文链接:https://css-tricks.com/snippets/css/a-guide-to-flexbox/ 父级(flex容器)的属性 #显示 这定义了一个flex容器; 内联或块取决于给定的值。它为所有直接的孩子提供了一个弹性环境。 .co…

cloudera manager的7180 web界面访问不了的解决办法(图文详解)

说在前面的话 我的机器是总共4台,分别为ubuntucmbigdata1、ubuntucmbigdata2、ubuntucmbigdata3和ubuntucmbigdata4。(注意啦,以下是针对Ubuntu系统的) 在ubuntucmbigdata1上执行了 sudo apt-get install cloudera-manager-daemon…

2018 ios开发者账号同意新协议加联系电话教程

苹果开发者账号经常会更新协议,需要同意新的协议账号才能正常使用。 1、首先登录苹果开发者中心https://developer.apple.com/account/ 会出现下面飘红的提示,就是提示你要同意新协议。因为苹果规则的改变,需要先到appid管理中心加个联系手机…

Django REST FRAMEWORK swagger(一)框架详解

Django REST FRAMEWORK swagger(一、框架详解) 一.Django REST SWAGGER框架图 具体见下图 二.说明 RESTFul说明 每一个URI代表一种资源; 客户端和服务器之间,传递这种资源的某种表现层; 客户端通过四个HTTP动词&…

Prism for WPF初探(构建简单的模块化开发框架)

Prism for WPF初探(构建简单的模块化开发框架) 原文:Prism for WPF初探(构建简单的模块化开发框架)先简单的介绍一下Prism框架,引用微软官方的解释: Prism provides guidance to help you more easily desi…

15-[JavaScript]-ECMAScript 1

0.javaScript的发展历程 https://zhuanlan.zhihu.com/p/27985124 1、javaScript是什么? javaScript是一种web前端的描述语言,也是一种基于对象(object)和事件驱动(Event Driven)的、安全性好的脚本语言。 它…

WPF MVVM 架构 Step By Step(2)(简单的三层架构示例及粘合代码GLUE code)

WPF MVVM 架构 Step By Step(2)(简单的三层架构示例及粘合代码GLUE code) 原文:WPF MVVM 架构 Step By Step(2)(简单的三层架构示例及粘合代码GLUE code)我们第一步就是去了解三层架构和问题然后去看MVVM是怎么去解决这些问题的。…

基于YARN集群构建运行PySpark Application

文章转载:https://www.tuicool.com/articles/eaYVN3v Spark Application可以直接运行在YARN集群上,这种运行模式,会将资源的管理与协调统一交给YARN集群去处理,这样能够实现构建于YARN集群之上Application的多样性,比…

Apache nifi 集群安装

原文地址:https://pierrevillard.com/2016/08/13/apache-nifi-1-0-0-cluster-setup/ 文章写的很好了,步骤性的英文写得也比较易懂,原样搬过来了,没有再翻译 As you may know a version 1.0.0-BETA of Apache NiFi has been rele…

Html5 学习笔记 --》html基础 css 基础

HTML5 功能 HTML5特点 <!DOCTYPE html> <html lang"zh-cn"> <head><meta charset"utf-8"><title>基本格式</title> </head> <body><a href"http://www.baidu.com">百度</a> </b…

VMware仅主机模式访问外网

原文转载至&#xff1a;https://blog.csdn.net/eussi/article/details/79054622 保证VMware Network Adapter VMnet1是启用状态 将可以连接外网的连接共享属性设置成如下图所示 将VMware Network Adapter VMnet1的IP地址设置成与本机IP不同的网段即可 VMware虚拟网络编辑器VMne…

IE上ORACLE OEM 证书错误 , 导航阻止,无法”继续浏览此网站”

文章转载自&#xff1a;http://blog.51cto.com/cswggod/1193266 仅用于个人学习&#xff0c;知识收藏 本文是我安装ORACLE11g后客户端IE访问不了是出现的&#xff0c;无奈下找OTN上help&#xff0c; 结果很lucky的被解脱了。 网站是&#xff1a;https://forums.oracle.com/for…

testng使用DataProvider+Excel实现DDT

DDT&#xff0c;即数据驱动测试 Data Driver Test&#xff0c;我曾经记录了一篇关于python的DDT框架&#xff08;ExcelDDT数据驱动实例&#xff09;&#xff0c;那么java中的DDT是怎么样的呢&#xff1f;在java中&#xff0c;可以用testng的DataProvider和Excel实现。 首先建一…

Linux安装Oracle12C 过程及遇到的问题

一、环境介绍 1、系统环境&#xff1a;CentOS7.1 Oracle版本&#xff1a;12C 12.1.0 二、安装过程 1、安装过程文档见百度云上的文档 链接&#xff1a;https://pan.baidu.com/s/1nvd07NF 密码&#xff1a;mey9 2、安装完后登录数据库 su oracle source ~/.bash_profiel…

云监控 Ganglia 安装步骤 (含python module)

文章转载自&#xff1a;https://my.oschina.net/duangr/blog/181585 &#xff0c;仅用于个人学习、收藏&#xff0c;转载请注明原作者地址。 前言 最近在研究云监控的相关工具,感觉ganglia颇有亮点,能从一个集群整体的角度来展现数据. 但是安装过程稍过复杂,相关依赖稍多…

ORA-65096: 公用用户名或角色名无效引发的思考

解决方式&#xff1a; alter session set "_ORACLE_SCRIPT"true; alter session set containerPDBORCL;原因&#xff1a;查官方文档得知“试图创建一个通用用户&#xff0c;必需要用C##或者c##开头”&#xff0c;这时候心里会有疑问&#xff0c;什么是common user&am…

VS封装给Unity使用的DLL

首先: 注意两点,一个是选择3.5,Unity最高支持到3.5 然后要选择第二个FrameWork类库 第一个会报错 然后导入Unity dll 我Unity安装在F:\AppLicationWorkSpace\Unity5.6.2\Unity\Editor\Data\Managed 用哪个导入哪个 然后生成 Ok 把生成的DLL放到Unity里就可以使用了 继续写…