C# 网络编程 TcpListener

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的更多相关文章
- C#网络编程之---TCP协议的同步通信(二)
上一篇学习日记C#网络编程之--TCP协议(一)中以服务端接受客户端的请求连接结尾既然服务端已经与客户端建立了连接,那么沟通通道已经打通,载满数据的小火车就可以彼此传送和接收了.现在让我们来看看数据的 ...
- [转]C#网络编程(订立协议和发送文件) - Part.4
本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part4.aspx 源码下载:http://www.trac ...
- [转]C#网络编程(异步传输字符串) - Part.3
本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part3.aspx 这篇文章我们将前进一大步,使用异步的方式 ...
- [转]C#网络编程(同步传输字符串) - Part.2
本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part2.aspx 服务端客户端通信 在与服务端的连接建立以 ...
- [转]C#网络编程(基本概念和操作) - Part.1
本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part1.aspx 引言 C#网络编程系列文章计划简单地讲述 ...
- C#网络编程之--TCP协议(一)
TCP 是面向连接的传输协议 面向连接,其实就好比,A打电话给B,如果B接听了,那么A和B之间就的通话,就是面向连接的 TCP 是全双工的传输协议 全双工,这个理解起来也很简单,A打电话给B,B接听电 ...
- C#网络编程(1)
1.Purpose 1.什么是网络编程 2.TCP/IP协议 3.什么是套接字 4.多线程深入理解 二.Basic Concept 1.网络编程:主要实现进程(线程)相互之间的通信和基本的网络应用原理 ...
- [C# 网络编程系列]专题三:自定义Web服务器
转自:http://www.cnblogs.com/zhili/archive/2012/08/23/2652460.html 前言: 经过前面的专题中对网络层协议和HTTP协议的简单介绍相信大家对网 ...
- C#网络编程系列(两)它Socket同步TCPserver
声明原文 笔者:竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程系列文 ...
随机推荐
- js记住密码
$(function () { if (getCookie("rmbUser") == "true") { $("#xuanzong") ...
- C#编程--第二天
一.变量:变量先声明,后赋值,再使用. 语法:变量类型 变量名=值: 变量类型: 分为基本数据类型和引用类 基本数据类型:整型.浮点型.字符型.布尔型 引用类:字符串.日期时间.枚举类型.结构类型 i ...
- myBatis配置提示xml和内部DTD
–配置环境:macOS high Sierra 10.13.6/window10–生产环境:eclipse2018.a,myeclipse2018 首先了解xml文件的参数——<!DOCT ...
- Linux用户的基本操作3 (组的基本管理,用户提权)
目录 组的基本原理 用户身份切换 5.用户身份提权 组的基本原理 组账户信息保存在/etc/group 和/etc/gshadow 两个文件中. /etc/group组账户信息 [root@zls ~ ...
- 将word文档中的回车符进行删除
- ab(http)与abs(https)压测工具
在学习ab工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second) 概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请 ...
- Centos yum的源 设置为阿里云源
在 阿里巴巴镜像站页面,在centos 操作的帮助,有介绍 wget和curl 2种方式来下载CentOS-Base.repo 备份 mv /etc/yum.repos.d/CentOS-Base.r ...
- Spring Bean 的生命周期,如何被管理的
1. 实例化一个Bean,也就是我们通常说的new 2. 按照Spring上下文对实例化的Bean进行配置,也就是IOC注入 3. 如果这个Bean实现了BeanNameAware接口,会调用它实现的 ...
- 程序猿必备的10款web前端动画插件
1.基于jQuery的瀑布流图片筛选插件 瀑布流的展现方式在目前的网页中用得越来越广泛,特别是图片和首页文章的动态加载. 今天分享的这款就是基于jQuery的瀑布流图片筛选插件,我们可以点击图片分类名 ...
- jQuery HTML-设置
例子1 html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> &l ...