1.服务断代码

 public partial class Server : Form
{ private bool lk = true; public Server()
{
InitializeComponent();
TextBox.CheckForIllegalCrossThreadCalls = false;
} private void button1_Click(object sender, EventArgs e)
{
IPAddress ip = IPAddress.Parse(textBox1.Text); TcpListener server = new TcpListener(ip, int.Parse(textBox2.Text));
server.Start(); TaskFactory tasks = new TaskFactory();
string ipaddress = string.Empty;
TcpClient client = null;
while (lk)
{
Console.WriteLine("等待连接。。。");
client = server.AcceptTcpClient(); tasks.StartNew(() => HandleClient(client, ipaddress)).Wait();
}
} private void HandleClient(TcpClient tcpclient, string ipadd)
{ lock (tcpclient)
{
if (tcpclient == null)
{
return;
} // Buffer for reading data
Byte[] bytes = new Byte[];
String data = null; // Enter the listening loop.
while (tcpclient.Connected)
{ data = null; NetworkStream stream = tcpclient.GetStream(); int i; if ((i = stream.Read(bytes, , bytes.Length)) != )
{
data = System.Text.Encoding.UTF8.GetString(bytes, , i); byte[] msg = System.Text.Encoding.UTF8.GetBytes(data); //stream.Write(msg, 0, msg.Length);
textBox3.AppendText(data);
}
tcpclient.Close();
}
}
} }

2.客户端代码

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} TcpClient client = null;
private void button1_Click(object sender, EventArgs e)
{ client = new TcpClient();
try
{
//if (!client.Connected)
// client.Close();
client.Connect(tbIP.Text, int.Parse(tbPort.Text)); // 与服务器连接
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return;
} textBox2.Text = "连接成功";
} private void textBox1_TextChanged(object sender, EventArgs e)
{ } private void button2_Click(object sender, EventArgs e)
{
button1_Click(null, null); string msg = textBox1.Text;
if (msg != "")
{
NetworkStream streamToServer = client.GetStream(); //创建一个客户端的NetworkStream对象
byte[] buffer = Encoding.UTF8.GetBytes(msg); // 获得缓存 streamToServer.Write(buffer, , buffer.Length); // 发往服务器
int numb = streamToServer.Read(buffer, , buffer.Length); //接收来自服务器传回来的数据,保存到buffer数组(byte型)中去
string s = Encoding.UTF8.GetString(buffer, , buffer.Length); //将数组中的内容转化成string字符串,并且输出
textBox2.AppendText(s + "\r\n");
}
}
}

C# 网络编程 TcpListener的更多相关文章

  1. C#网络编程之---TCP协议的同步通信(二)

    上一篇学习日记C#网络编程之--TCP协议(一)中以服务端接受客户端的请求连接结尾既然服务端已经与客户端建立了连接,那么沟通通道已经打通,载满数据的小火车就可以彼此传送和接收了.现在让我们来看看数据的 ...

  2. [转]C#网络编程(订立协议和发送文件) - Part.4

    本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part4.aspx 源码下载:http://www.trac ...

  3. [转]C#网络编程(异步传输字符串) - Part.3

    本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part3.aspx 这篇文章我们将前进一大步,使用异步的方式 ...

  4. [转]C#网络编程(同步传输字符串) - Part.2

    本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part2.aspx 服务端客户端通信 在与服务端的连接建立以 ...

  5. [转]C#网络编程(基本概念和操作) - Part.1

    本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part1.aspx 引言 C#网络编程系列文章计划简单地讲述 ...

  6. C#网络编程之--TCP协议(一)

    TCP 是面向连接的传输协议 面向连接,其实就好比,A打电话给B,如果B接听了,那么A和B之间就的通话,就是面向连接的 TCP 是全双工的传输协议 全双工,这个理解起来也很简单,A打电话给B,B接听电 ...

  7. C#网络编程(1)

    1.Purpose 1.什么是网络编程 2.TCP/IP协议 3.什么是套接字 4.多线程深入理解 二.Basic Concept 1.网络编程:主要实现进程(线程)相互之间的通信和基本的网络应用原理 ...

  8. [C# 网络编程系列]专题三:自定义Web服务器

    转自:http://www.cnblogs.com/zhili/archive/2012/08/23/2652460.html 前言: 经过前面的专题中对网络层协议和HTTP协议的简单介绍相信大家对网 ...

  9. C#网络编程系列(两)它Socket同步TCPserver

    声明原文 笔者:竹zz  本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程系列文 ...

随机推荐

  1. Visual Assist 10.9.2248 破解版(支持VS2017) 转载

    自己在Windows10下同时安装了VS2017和VS2013,先装的VS2017和Visual Assist,后装的VS2013,发现VS2013中没显示Visual Assist,Google了一 ...

  2. js的浏览器判断方法

    使用navigator.userAgent来判断浏览器类型. 1.浏览器版本号函数: var br=navigator.userAgent.toLowerCase();   var browserVe ...

  3. [Java] 缓存池

    new Integer(123) 与 Integer.valueOf(123) 的区别在于: new Integer(123) 每次都会新建一个对象: Integer.valueOf(123) 会使用 ...

  4. easyUI学习笔记一

    1.引用js文件 <script type="text/javascript" src = jquery-easyui/jquery.min.js> </scri ...

  5. canvas时间粒子

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. python删除某一行

    整理了网络上的一些方法,一般有两种方法:第一种:是先把文件读入内存,在内存中修改后再写入源文件. 例子:将内容包含“123”的所有行删去: with open('C:/Users/lai/Deskto ...

  7. DataX简介

    DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.Oracle.SqlServer.Postgre.HDFS.Hive.ADS.HBase.TableStore(O ...

  8. SQL数据库—<6-001> 常用系统存储过程大全 --摘录网

    -- 来源于网络 -- 更详细的介结参考联机帮助文档 xp_cmdshell --*执行DOS各种命令,结果以文本行返回. xp_fixeddrives --*查询各磁盘/分区可用空间 xp_logi ...

  9. 【报错】解决logstash tracking_column not found in dataset. {:tracking_column=>"updated_time"}问题

    今天用logstash同步数据库记录到elasticsearch时候出现错误,错误信息如下: [2019-10-12T23:51:00,529][WARN ][logstash.inputs.jdbc ...

  10. RIDE使用介绍

    [转载] RIDE是一款专门用来编辑Robot Framework用例的软件,用Python编写并且开源.当我们针对一个系统编写好一套用例后,每当我们对系 统做一些更改的时候,便可以把已经写好的用例拿 ...