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连接分为短 ...
随机推荐
- 数学 Codeforces Round #282 (Div. 2) B. Modular Equations
题目传送门 题意:a % x == b,求符合条件的x有几个 数学:等式转换为:a == nx + b,那么设k = nx = a - b,易得k的约数(>b)的都符合条件,比如a=25 b=1 ...
- jmeter(十五)Jmeter默认报告优化
一.本文目的: 之前写了两篇文章搭建持续集成接口测试平台(Jenkins+Ant+Jmeter)和ANT批量执行Jmeter脚本,功能实现上都没有什么问题,但是最后生成的报告有一点小问题,虽然不影响使 ...
- 451 Sort Characters By Frequency 根据字符出现频率排序
给定一个字符串,请将字符串里的字符按照出现的频率降序排列.示例 1:输入:"tree"输出:"eert"解释:'e'出现两次,'r'和't'都只出现一次.因此' ...
- Coprime Conundrum 容斥原理
https://www.hackerrank.com/contests/hourrank-13/challenges/arthur-and-coprimes 我们可以枚举每一个p在[2, sqrt(n ...
- Windowsforms 中对话框,流、文件操作
对话框: 1.颜色选择控件——ColorDialog //显示颜色选择器 colorDialog1.ShowDialog(); //把取到的颜色赋值给panel panel1.BackColor = ...
- 可变类型的安全性——更锋利的C#代码小记(2)
ReadOnlyCollection类型是.NET系统类库提供的一个只读集合类型,它与原来的List<string>不存在任何类型转换关系,因此可以从根本上阻止外部对其的修改操作using ...
- 工作记录 SQL prompt .net平台版本安装
昨天泡脚了,虽然依然睡的很晚,但是身体很舒服,尽量坚持把 上午尝试用一根网线,链接服务器和笔记本,但是设置好了,Ping不通. 下午安装SQL插件SQL prompt https://www.cnbl ...
- 学习笔记 第十五章 JavaScript基础
第15章 JavaScript基础 [学习重点] 了解JavaScript基础知识 熟悉常量和变量 能够使用表达式和运算符 正确使用语句 能够掌握数据类型和转换的基本方法 正确使用函数.对象.数组 ...
- R in action读书笔记(9)-第八章:回归 -回归诊断
8.3回归诊断 > fit<-lm(weight~height,data=women) > par(mfrow=c(2,2)) > plot(fit) 为理解这些图形,我们来回 ...
- Context namespace element 'annotation-config' and its parser class [org.springframework.context.annotation.AnnotationConfigBeanDefinitionParser]
严重: Exception sending context initialized event to listener instance of class org.springframework.we ...