c# TcpClient简易聊天工具
说明: TcpClient 链接是一个比较安全稳定的链接,作为聊天或者是数据稳定传输,是比较合适的,下面的代码测试过,如果你吧他放在公网服务器上,也是可以用的
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Threading;
using System.IO;
using System.Net.Sockets;
using System.Text.RegularExpressions; namespace ChatsTolls
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool b=true;
private Thread td;
private TcpListener listenter;
private NetworkStream ns;
private StreamWriter sw;
private StreamReader sr;
private Socket socket;
private TcpClient client; private void Form1_Load(object sender, EventArgs e)
{ }
private void Run()
{
b = false;
while (true)
{
try
{
socket = listenter.AcceptSocket();
}
catch (Exception)
{
return;
}
label1.Text = "已经连接";
ns = new NetworkStream(socket);
sr = new StreamReader(ns); //读取信息
sw = new StreamWriter(ns); //写入信息 ClosingFrom();
} }
private void button1_Click(object sender, EventArgs e)
{
if (sw != null && txtWrite.Text != "")
{
if (b)
{
sw.WriteLine("ci说:" + txtWrite.Text.Trim());
sw.Flush();
lisAdd.Items.Add("我说:" + txtWrite.Text.Trim());
txtWrite.Clear();
}
else
{
sw.WriteLine("zhu说:" + txtWrite.Text.Trim());
sw.Flush();
lisAdd.Items.Add("我说:" + txtWrite.Text.Trim());
txtWrite.Clear();
}
} }
private void ClosingFrom()
{
try
{
while ( == )
{
string line = null;
if ((line = sr.ReadLine()) != null)
{
lisAdd.Items.Add(line);
}
else
{
label1.Text = "已经断开";
break;
}
}
}
catch (Exception ex)
{ label1.Text = "";
}
finally
{
if (td.ThreadState == ThreadState.Running)
{
sr.Close();
sw.Close();
ns.Close();
if (!b)
{
socket.Close();
}
else
{
client.Close();
}
listenter.Stop(); sw = null;
td.Abort();
}
}
} private void btnGet_Click(object sender, EventArgs e)
{
if (td != null)
{
if (td.ThreadState == ThreadState.Running)
{
sr.Close();
sw.Close();
ns.Close();
if (!b)
{
socket.Close();
}
else
{
client.Close();
}
listenter.Stop();
sw = null;
td.Abort();
}
}
this.Close();
} private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (td != null)
{
if (td.ThreadState == ThreadState.Running)
{
sr.Close();
sw.Close();
ns.Close();
if (!b)
{
socket.Close();
}
else
{
client.Close();
}
listenter.Stop();
sw = null;
td.Abort();
}
}
} private void button1_Click_1(object sender, EventArgs e)
{
if (btnZ.Text =="连 接")
{
if (string.IsNullOrEmpty(txtPort.Text))
{
MessageBox.Show("请输入端口号");
txtPort.Focus();
return;
} //判断端口号
if (string.IsNullOrEmpty(txtIp.Text))
{
MessageBox.Show("请输入Ip");
txtIp.Focus();
return;
}
b = true;
int j = int.Parse(txtPort.Text.Trim());
string ip = txtIp.Text.Trim();
//w外网上不能用Dns
//IPHostEntry ipHost = Dns.GetHostEntry(ip);
try
{ client = new TcpClient();
client.Connect(IPAddress.Parse(ip), j);
ns = this.client.GetStream();
sr = new StreamReader(ns);
sw = new StreamWriter(ns);
td = new Thread(new ThreadStart(Runs));
td.IsBackground = true;
td.Start();
label1.Text = "已经连接";
btnZ.Text = "断开连接";
btnX.Enabled = false;
}
catch (Exception ex)
{ label1.Text = "未找到网络";
}
}
else
{
if (td != null)
{ try
{
sr.Close();
sw.Close();
ns.Close();
if (!b)
{
socket.Close();
}
else
{
client.Close();
}
sw = null;
td.Abort();
}
catch (Exception)
{ } } btnX.Enabled = true;
btnZ.Text = "连 接";
label1.Text = "";
}
}
private void Runs()
{
ClosingFrom();
} private void button2_Click(object sender, EventArgs e)
{
if (btnX.Text == "监 听")
{
if (string.IsNullOrEmpty(txtPort.Text))
{
MessageBox.Show("请输入端口号");
txtPort.Focus();
return;
} //判断端口号的方法
b = false;
int j = int.Parse(txtPort.Text.Trim());
Control.CheckForIllegalCrossThreadCalls = false;
listenter = new TcpListener(j); //监听实例化 并写入需要监听的端口
listenter.Start(); //开始监听
td = new Thread(new ThreadStart(Run)); //定义线程进行监听
td.IsBackground = true;
td.Start(); //线程启动
btnX.Text = "取消监听";
btnZ.Enabled = false;
labJ.Text = "正在监听...";
}
else
{ try
{
listenter.Stop();
td.Abort();
}
catch (Exception)
{ }
btnZ.Enabled = true;
btnX.Text = "监 听";
labJ.Text = "";
}
}
}
}
界面:

首先应在服务器上打开 输入端口号并监听
然后本地输入服务Ip 和端口 点击链接 就可以了
写的比较急,就不多说了
c# TcpClient简易聊天工具的更多相关文章
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增企业通(内部简易聊天工具)
RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本 新增企业通(内部简易聊天工具) RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用 ...
- java+socket 简易聊天工具
1.服务器端程序 package com.test3; import java.io.*; import java.net.*; import java.awt.*; import java.awt. ...
- Python简易聊天工具-基于异步Socket通信
继续学习Python中,最近看书<Python基础教程>中的虚拟茶话会项目,觉得很有意思,自己敲了一遍,受益匪浅,同时记录一下. 主要用到异步socket服务客户端和服务器模块asynco ...
- 05-python 学习第五天,简易聊天工具(shelve模块练习)
需求:1.有两个用户,一个是mychat.py,另一个是youchat.py2.通过执自己的文件,可以看到对方输入的内容,实现连个命令行窗口之间聊天的功能.3.通过shelve 持久化写入和和读取功能 ...
- Python3 实现简易局域网视频聊天工具
Python3 实现简易局域网视频聊天工具 1.环境 操作系统为 Ubuntu 16.04 python 3.5opencv-python 3.4.1.15numpy 1.14.5PyAudio ...
- 基于WebServices简易网络聊天工具的设计与实现
基于WebServices简易网络聊天工具的设计与实现 Copyright 朱向洋 Sunsea ALL Right Reserved 一.项目内容 本次课程实现一个类似QQ的网络聊天软件的功能:服务 ...
- 用Socket做一个局域网聊天工具(转)
原文:http://www.cnblogs.com/technology/archive/2010/08/15/1799858.html 程序设计成为简单的服务端和客户端之间的通信, 但通过一些方法可 ...
- Java之简单的聊天工具
今天整理资料的时候,找出自己几年前刚学Java时做过的一个简易的聊天工具,有服务器也有客户端,能发送文字消息和文件,但是用户上线并未存入数据库,而只是简单的缓存在服务器的一个数组中,所以,只要服务器一 ...
- php+websocket搭建简易聊天室实践
1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...
随机推荐
- pycharm版本选择并安装
pycharm版本选择并安装 一. 初学python最好选择专业版的,因为经测试社区版的很多插件都没有安装,如果自己安装的话会非常麻烦,而且很多根本就安装不上,比如说css,javascript,d ...
- NOIP-2018
时隔一年,再度踏入NOIp的考场,内心感慨万分 Day0 在中巴上昏睡了3h++,终于到了长沙理工大学,国际学术交流中心......不太对,好像是国际交流中心与综合实验楼连线--理工大学的另一个大门外 ...
- html 测试
斯蒂芬斯蒂芬 20:23你过来吧,我们好好谈一谈 好好学习 21:22这是一个无法避免的错误 作为一个新手,我在学习HTML文件的格式,我觉得博客园的编辑器很棒, 查看这些源代码让我学习到了许多知识. ...
- sed简单脚本练习
sed脚本的执行顺序可以简记为:Read,Execute,Print,Repeat(读取,执行,打印,重复)简称REPR 分析脚本的执行顺序: l 读取一行到模式空间(sed内部的一个临时缓存,用于存 ...
- bootstrap datatable项目封装
(function($) { $.fn.formJSON = function() { var serializeObj = {}; var array = t ...
- [BZOJ4815][CQOI2017]小Q的表格 数论+分块
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4815 题目中所给条件中的$(a,a+b)$和$(a,b)$的关系很瞩目. 然后大家都知道$ ...
- 迅速搞懂JavaScript正则表达式之方法
咱们来看看JavaScript中都有哪些操作正则的方法. RegExp RegExp 是正则表达式的构造函数. 使用构造函数创建正则表达式有多种写法: new RegExp('abc');// /ab ...
- tar (child): lbzip2: Cannot exec: No such file or directory tar (child): Error is not recoverable: exiting now tar: Child returned status 2 tar: Error is not recoverable: exiting now
tar解压bz2格式 报错 解决方法很简单,只要安装bzip2就行了,yum安装的命令如下: yum -y install bzip2 如果是无法联网,可以去官网下载安装包,进一步安装即可
- laravel JWTAuth实现api接口鉴权(基础篇)
官网:https://jwt-auth.readthedocs.io 参考:https://learnku.com/articles/10885/full-use-of-jwt#99529f 1.to ...
- MFC中调用Windows API函数的方式
windows aoi 函数的调用前面加::