当前位置: 首页 > news >正文

Visual C#.Net网络程序开发-Tcp篇(3)

作者:aspxer  来源:internet  日期:2007-5-20 15:38:35  关键字:c#,.net

Visual C#.Net网络程序开发-Tcp篇(3)

综合运用上面的知识,下面的实例实现了简单的网络通讯-双机互连,针对客户端和服务端分别编制了应用程序。客户端创建到服务端的连接,向远程主机发送连接请求连接信号,并发送交谈内容;远程主机端接收来自客户的连接,向客户端发回确认连接的信号,同时接收并显示客户端的交谈内容。在这个基础上,发挥你的创造力,你完全可以开发出一个基于程序语言(C#)级的聊天室!

客户端主要源代码:

public void SendMeg()//发送信息

{

try

{

int port=Int32.Parse(textBox3.Text.ToString());//远程主机端口

try

{

tcpClient=new TcpClient(textBox1.Text,port);//创建TcpClient对象实例 }

catch(Exception le)

{

MessageBox.Show("TcpClient Error:"+le.Message);

}

string strDateLine=DateTime.Now.ToShortDateString()+" "+DateTime.Now.ToLongTimeString();//得到发送时客户端时间

netStream=tcpClient.GetStream();//得到网络流

sw=new StreamWriter(netStream);//创建TextWriter,向流中写字符

string words=textBox4.Text;//待发送的话

string content=strDateLine+words;//待发送内容

sw.Write(content);//写入流

sw.Close();//关闭流写入器

netStream.Close();//关闭网络流

tcpClient.Close();//关闭客户端连接

}

catch(Exception ex)

{

MessageBox.Show("Sending Message Failed!"+ex.Message);

}

textBox4.Text="";//清空

}

服务器端主要源代码:

public void StartListen()//侦听特定端口的用户请求

{

//ReceiveMeg();

isLinked=false; //连接标志

try

{

int port=Int32.Parse(textBox1.Text.ToString());//本地待侦听端口

serverListener=new TcpListener(port);//创建TcpListener对象实例

serverListener.Start(); //启动侦听

}

catch(Exception ex)

{

MessageBox.Show("Can@#t Start Server"+ex.Message);

return;

}

isLinked=true;

while(true)//进入无限循环等待用户端连接

{

try

{

tcpClient=serverListener.AcceptTcpClient();//创建客户端连接对象

netStream=tcpClient.GetStream();//得到网络流

sr=new StreamReader(netStream);//流读写器

}

catch(Exception re)

{

MessageBox.Show(re.Message);

}

string buffer="";

string received="";

received+=sr.ReadLine();//读流中一行

while(received.Length!=0)

{

buffer+=received;

buffer+="\r\n";

//received="";

received=sr.ReadLine();

}

listBox1.Items.Add(buffer);//显示

//关闭

sr.Close();

netStream.Close();

tcpClient.Close();

}

}

 

转载于:https://www.cnblogs.com/yohen/articles/852518.html

相关文章:

  • [New Portal]Windows Azure Virtual Machine (3) 在VM上挂载磁盘
  • ajax.net 我曾经轻视了他,郁闷。
  • 彻底去除Win10“快速访问”
  • 网络服务器时间发布地址
  • 《Python地理数据处理》——2.3 变量
  • 只能使用数组初始值设定项表达式为数组类型赋值。请尝试改用新的表达式
  • 《Total Commander:万能文件管理器》——12.3.高人高见
  • 在C#中应用哈希表(Hashtable)
  • 《Python数据可视化编程实战》——5.2 创建3D柱状图
  • c#.net中参数修饰符ref,out ,params的区别
  • 《JavaScript设计模式》——9.10 Factory(工厂)模式
  • 以太网帧格式、IP数据报格式、TCP段格式+UDP段格式 详解
  • webgis实现技术分析
  • 《Oracle数据库性能优化方法论和最佳实践》——第3章 流程分析之数据库登录流程 3.1 数据库登录导致业务系统性能恶化案例分享...
  • 《Cisco BGP-4 命令与配置手册》——导读
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Asm.js的简单介绍
  • Fabric架构演变之路
  • github从入门到放弃(1)
  • input实现文字超出省略号功能
  • KMP算法及优化
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 从重复到重用
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 前言-如何学习区块链
  • 数据科学 第 3 章 11 字符串处理
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 智能网联汽车信息安全
  • 从如何停掉 Promise 链说起
  • 函数计算新功能-----支持C#函数
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • #Linux(make工具和makefile文件以及makefile语法)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (04)odoo视图操作
  • (3)(3.5) 遥测无线电区域条例
  • (SpringBoot)第二章:Spring创建和使用
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (分布式缓存)Redis持久化
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)c++ std::pair 与 std::make
  • (转)Scala的“=”符号简介
  • (转载)(官方)UE4--图像编程----着色器开发
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • 、写入Shellcode到注册表上线
  • ./configure、make、make install 命令
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .gitignore文件_Git:.gitignore
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .Net 路由处理厉害了
  • .NET 设计模式初探
  • .NET 中让 Task 支持带超时的异步等待
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET的数据绑定