1.设计界面:

 
2.效果界面:
 
3.具体实现代码:
 

public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}

private Thread td;//声明线程对象
private TcpListener tcpListener; //声明侦听对象
private static string message = "";//记录发送的消息

private void frmMain_Load(object sender, EventArgs e)
{
td = new Thread(new ThreadStart(StartListen));//实例化线程类对象
td.Start();//启动线程
timer1.Start();//启动计时器
}

private void StartListen()//监听
{
message = "";//清空消息
tcpListener = new TcpListener(2029);//实例化侦听对象
tcpListener.Start();//开始监听
while(true)
{
TcpClient tclient = tcpListener.AcceptTcpClient();//接受连接请求
NetworkStream nstream = tclient.GetStream();// 获取数据流
byte[] mbyte = new byte[100];//建立缓存
int i = nstream.Read(mbyte,0,mbyte.Length);//将数据流写入缓存
message = Encoding.Default.GetString(mbyte, 0, i);//记录发送的消息
}
}

private void button2_Click(object sender, EventArgs e)//发送
{
try
{
IPAddress[] ip = Dns.GetHostAddresses(Dns.GetHostName());//获取主机名
string strmsg = "" + tbName.Text + "(" + ip[1].ToString() + ")" + DateTime.Now.ToLongTimeString() + "\n" +
this.rtbSend.Text + "\n";//定义消息格式
TcpClient client = new TcpClient(tbIp.Text, 2029);//实例化TcpClient对象
NetworkStream netStream = client.GetStream();//实例化NetworkStream网络流对象
StreamWriter wstream = new StreamWriter(netStream,Encoding.Default);//实例化数据写入对象
wstream.Write(strmsg);//将消息写入网络流
wstream.Flush();//释放网络流对象
wstream.Close();//关闭网络流对象
client.Close();//关闭TcpClient
rtbContent.AppendText(strmsg);//将发送的消息添加到文本框
rtbSend.Clear();//清空发送消息文本框
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}

private void timer1_Tick(object sender, EventArgs e)//计时器
{
if(message!="")
{
rtbContent.AppendText(message);//将接收到的消息添加到文本框中
rtbContent.ScrollToCaret();//自动滚动文本框的滚动条
message = "";
}
}

private void frmMain_FormClosed(object sender, FormClosedEventArgs e) //窗体关闭
{
if (tcpListener != null)//判断侦听对象是否关闭
tcpListener.Stop();//停止侦听
if(td!=null)//判断线程是否为空
{
if (td.ThreadState == ThreadState.Running)//判断线程是否正在运行
td.Abort();//终止线程
}
}

}

网络编程 socket-实例的更多相关文章

  1. 网络编程socket基本API详解(转)

    网络编程socket基本API详解   socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...

  2. Android 网络编程 Socket

    1.服务端开发 创建一个Java程序 public class MyServer { // 定义保存所有的Socket,与客户端建立连接得到一个Socket public static List< ...

  3. 网络编程Socket之TCP之close/shutdown具体解释(续)

    接着上一篇网络编程Socket之TCP之close/shutdown具体解释 如今我们看看对于不同情况的close的返回情况和可能遇到的一些问题: 1.默认操作的close 说明:我们已经知道writ ...

  4. 铁乐学Python_Day33_网络编程Socket模块1

    铁乐学Python_Day33_网络编程Socket模块1 部份内容摘自授课老师的博客http://www.cnblogs.com/Eva-J/ 理解socket Socket是应用层与TCP/IP协 ...

  5. Python网络编程socket

    网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...

  6. java网络编程socket\server\TCP笔记(转)

    java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅     1 TCP的开销 a ...

  7. linux网络编程-socket(37)

    在编程的时候需要加上对应pthread开头的头文件,gcc编译的时候需要加了-lpthread选项 第三个参数是线程的入口参数,函数的参数是void*,返回值是void*,第四个参数传递给线程函数的参 ...

  8. python网络编程-socket编程

     一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...

  9. Python开发【第八篇】:网络编程 Socket

    Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...

  10. python网络编程socket /socketserver

    提起网络编程,不同于web编程,它主要是C/S架构,也就是服务器.客户端结构的.对于初学者而言,最需要理解的不是网络的概念,而是python对于网络编程都提供了些什么模块和功能.不同于计算机发展的初级 ...

随机推荐

  1. iOS开发——常用宏的定义

    有些时候,我们需要将代码简洁化,这样便于读代码.我们可以将一些不变的东东抽取出来,将变化的东西作为参数.定义为宏,这样在写的时候就简单多了. 下面例举了一些常用的宏定义和大家分享: 1. 判断设备的操 ...

  2. js-ajax实现获取xmlHttp对象

    //获取xmlHttp对象 function createXMLHttp() { var xmlhttp; //对于大多数浏览器适用 if (window.XMLHttpRequest) { xmlh ...

  3. H.264 Transform

    变换是视频.图像编码的核心部分.目前所采用的变换算法都是从傅里叶变换演变而来.单纯的变换并不会导致视频(图像)的码率变小,反而会增大.但是非常巧妙的一点是:变换把图像从空域转换成的时域,把由色块组成的 ...

  4. -_-#【Mac】快捷操作

    快捷键 command + 拖拽 = 剪切option + 拖拽 = 复制command + option + 拖拽 = 快捷方式 command + ] 前进command + [ 后退 comma ...

  5. 辗转相除法_欧几里得算法_java的实现(求最大公约数)

    辗转相除法,又被称为欧几里德(Euclidean)算法, 是求最大公约数的算法. 当然也可以求最小公倍数. 算法描述 两个数a,b的最大公约数记为GCD(a,b).a,b的最大公约数是两个数的公共素因 ...

  6. Matlab:拟合(2)

    非线性最小二乘拟合: 解法一:用命令lsqcurvefit function f = curvefun(x, tdata) f = x() + x()*exp() * tdata); %其中x() = ...

  7. jquery 异步请求Demo【转载】

    $(document).ready(function() { $.ajax({ url : "/AjaxAction/LoginArea.ashx", data : {userna ...

  8. dojox.grid.EnhancedGrid 和 dojox.grid.DataGrid 的继承关系

    dojox.grid.EnhancedGrid  的介绍说, EnhancedGrid 是基于 DataGrid 提供增强功能的. EnhancedGrid (dojox.grid.EnhancedG ...

  9. UVA196-Spreadsheet(拓扑排序)

    Spreadsheet In 1979, Dan Bricklin and Bob Frankston wrote VisiCalc, the first spreadsheet applicatio ...

  10. Selenium索引

    Common Selenium各种工具比较 Selenium firefox 版本问题 Selenium IDE Selenium IDE整理 WebDriver Java 版本 Selenium开始 ...