说明: 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简易聊天工具的更多相关文章

  1. RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增企业通(内部简易聊天工具)

    RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本 新增企业通(内部简易聊天工具) RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用 ...

  2. java+socket 简易聊天工具

    1.服务器端程序 package com.test3; import java.io.*; import java.net.*; import java.awt.*; import java.awt. ...

  3. Python简易聊天工具-基于异步Socket通信

    继续学习Python中,最近看书<Python基础教程>中的虚拟茶话会项目,觉得很有意思,自己敲了一遍,受益匪浅,同时记录一下. 主要用到异步socket服务客户端和服务器模块asynco ...

  4. 05-python 学习第五天,简易聊天工具(shelve模块练习)

    需求:1.有两个用户,一个是mychat.py,另一个是youchat.py2.通过执自己的文件,可以看到对方输入的内容,实现连个命令行窗口之间聊天的功能.3.通过shelve 持久化写入和和读取功能 ...

  5. Python3 实现简易局域网视频聊天工具

    Python3 实现简易局域网视频聊天工具   1.环境 操作系统为 Ubuntu 16.04 python 3.5opencv-python 3.4.1.15numpy 1.14.5PyAudio ...

  6. 基于WebServices简易网络聊天工具的设计与实现

    基于WebServices简易网络聊天工具的设计与实现 Copyright 朱向洋 Sunsea ALL Right Reserved 一.项目内容 本次课程实现一个类似QQ的网络聊天软件的功能:服务 ...

  7. 用Socket做一个局域网聊天工具(转)

    原文:http://www.cnblogs.com/technology/archive/2010/08/15/1799858.html 程序设计成为简单的服务端和客户端之间的通信, 但通过一些方法可 ...

  8. Java之简单的聊天工具

    今天整理资料的时候,找出自己几年前刚学Java时做过的一个简易的聊天工具,有服务器也有客户端,能发送文字消息和文件,但是用户上线并未存入数据库,而只是简单的缓存在服务器的一个数组中,所以,只要服务器一 ...

  9. php+websocket搭建简易聊天室实践

    1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...

随机推荐

  1. nginx https反向代理tomcat

    Context体现在server.xml中的Host里的<Context>元素,它由Context接口定义.每个<Context>元素代表了运行在虚拟主机上的单个Web应用. ...

  2. MyEclipse2014+Maven配置记录

    一.MyEclipse配置Maven 打开MyEclipse2014,选择菜单:Window --> Preferences,选择:MyEclipse-Maven4MyEclipse-Insta ...

  3. 转-CoreText 使用教程

    转自:http://www.dapps.net/dev/iphone/how-to-create-a-simple-magazine-app-with-core-text.html Core Text ...

  4. html 相对定位 绝对 定位 css + div

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 0 Transitional//EN""http://www.worg/TR/xh ...

  5. python版本2和3使用range()函数方法

    python 2:可以直接使用range(5) 输入的列表结果和预期的一样 python 3:使用range(5) 得到列表结果却是这个,和预期的不一致,其原因是节省空间,防止过大的列表产生 如果想要 ...

  6. 如何成为一名优秀的 iOS 开发工程师

    如果你是一位专业的iOS开发工程师,你应该为自己感到自豪.因为你能在强大的iOS系统下,一展身手实现自己和他人的想法,这是一件令人无比激动的事情. 作为一名iOS开发工程师,你一定想成为行业的佼佼者. ...

  7. c语言-依赖倒转

    当一个文件(aa.c文件)依赖于头文件(bb.h)时,如果bb.c编译之后形成的bb.o文件重新编译后,aa.o的文件不需要重新编译 aa.c文件: bb.h文件:对bb.c文件进行声明 bb.c文件 ...

  8. 461在全志r16平台tinav3.0系统下使用地磁计QMC5883L

    461在全志r16平台tinav3.0系统下使用地磁计QMC5883L 2018/9/7 14:08 版本:V1.0 开发板:SC3817R SDK:tina v3.0 (基本确认全志tina v3. ...

  9. iOS Programming Auto Layout: Programmatic Constraints 自动布局:通过编程限制

    iOS Programming  Auto Layout: Programmatic Constraints  1.  However, if your views are created in co ...

  10. [转]1小时内打造你自己的PHP MVC框架

    简介 MVC框架在现在的开发中相当流行,不论你使用的是JAVA,C#,PHP或者IOS,你肯定都会选择一款框架.虽然不能保证100%的开发语言都会使用框架,但是在PHP社区当中拥有*多数量的MVC框架 ...