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. LR 场景设置

    LR 场景设置group:多个脚本按照独立设置模式跑,各个脚本可以单独设置虚拟用户.运行时间scenario:多个脚本之间按照相同模式跑,将总的虚拟用户数按照一定比例分配给各个脚本 schedule ...

  2. Springboot系列1_什么是Springboot

    Springboot系列1_什么是Springboot */--> code {color: #FF0000} pre.src {background-color: #002b36; color ...

  3. luoguP3128 [USACO15DEC]最大流Max Flow 题解(树上差分)

    链接一下题目:luoguP3128 [USACO15DEC]最大流Max Flow(树上差分板子题) 如果没有学过树上差分,抠这里(其实很简单的,真的):树上差分总结 学了树上差分,这道题就极其显然了 ...

  4. POJ 3468 A Simple Problem with Integers(线段树,区间更新,区间求和)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 67511   ...

  5. vue 纯前端导出 excel 表格

    在开发后台管理系统的时候,很多地方都要用到导出excel 表格,比如将table中的数据导出到本地,那么实现这种需求往往有两种方案: 一.后端开发一个下载链接,前端将这个链接放到 a 标签的 href ...

  6. 42.Flatten Binary Tree to Linked List

    Level:   Medium 题目描述: Given a binary tree, flatten it to a linked list in-place. For example, given ...

  7. c# WPF DataGrid 获取选中单元格信息

    private void Dg_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) { Console.Write ...

  8. Vue中组件间传值常用的几种方式

    版本说明: vue-cli:3.0 一.父子组件间传值 1.props/$emit -父组件==>>子组件: 子组件中通过定义props接收父组件中通过v-bind绑定的数据 父组件代码 ...

  9. Mysql语句优化建议

    一.建立索引 1)考虑在 where 及 order by 涉及的列上建立索引 2)对于模糊查询, 建立全文索引 3)对于多主键查询,建立组合索引 二.避免陷阱 然而,一些情况下可能使索引无效: 1) ...

  10. 如何理解CPU上下文切换(二)

    如何理解CPU上下文切换(二) 1.引 你们好,可爱的小伙伴们.^_^ 多个进程竞争CPU就是一个经常被我们忽视的问题. 你们一定很好奇,进程在竞争CPU的时候并没有真正运行,为什么还会导致系统的负载 ...