基于TCP的Socket基础例子

服务端的代码

 public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Socket clientSocket = null;
int tiaoshu = ; private void Form1_Load(object sender, EventArgs e)
{
try
{
this.txtPort.Text = "";
this.txtSend.Text = "服务端发送"; }
catch { }
} //创建并监听
private void listen()
{
try
{
//获取服务器IP
// clientSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); //因为用的一台机器测试所以服务器的IP设置成了127.0.0.1,这里填写的是服务端的IP地址如:192.168.1.110
IPAddress HostIp = IPAddress.Parse("127.0.0.1"); //创建一个网络端点
IPEndPoint iep = new IPEndPoint(HostIp, Int32.Parse(this.txtPort.Text.Trim())); //创建服务端服务端套接字
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //将套接字与网络端点绑定
serverSocket.Bind(iep); serverSocket.Listen(); clientSocket = serverSocket.Accept(); if(!clientSocket.Connected)
{
clientSocket=null;
}
if(clientSocket!=null)
{
tiaoshu = ;
} }
catch { } }
Thread threadList;
// Socket clientSocket=null;
private void btnStart_Click(object sender, EventArgs e)
{
try
{
if (this.btnStart.Text == "启动服务")
{ this.btnStart.Text = "停止服务"; threadList = new Thread(new ThreadStart(listen)); threadList.Start(); timer1.Enabled = true; //this.lblState.Text = "连接成功!";
}
else {
this.btnStart.Text = "启动服务"; timer1.Enabled = false; threadList.Abort();
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close(); //this.lblState.Text = "连接失败!"; }
}
catch { }
} private void timer1_Tick(object sender, EventArgs e)
{
try
{
if (clientSocket != null)
{
if (clientSocket.Connected)
{
this.lblState.Text = "连接成功!"; byte[] receiveBytes = new byte[]; if (clientSocket.Poll(, SelectMode.SelectRead))
{
int successReceiveBytes = clientSocket.Receive(receiveBytes);
this.txtReceive.Text = "客户端" + clientSocket.RemoteEndPoint.ToString()
+ "\r\n" + "接收" + System.Text.Encoding.UTF8.GetString(receiveBytes, , successReceiveBytes);
this.txtReceive.SelectionLength = txtReceive.Text.Length;
this.txtReceive.ScrollToCaret();
} }
else
{
this.lblState.Text = "连接失败!";
}
} }
catch { }
} private void btnSend_Click(object sender, EventArgs e)
{
try
{
if(clientSocket==null)
{
this.lblState.Text = "连接失败";
}else
{
string sendMessage = this.txtSend.Text.Trim();
byte[] message = System.Text.Encoding.UTF8.GetBytes(sendMessage);
int successSendMessage = clientSocket.Send(message,message.Length,SocketFlags.None); } }
catch { }
}
}

客户端的代码

 public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
this.txtIP.Text = "127.0.0.1";//服务端的IP地址,这里因为是服务端是本机写127.0.0.1,如服务端是192.168.1.110,这里应该写192.168.1.110
this.txtPort.Text = "";//服务端发布的端口号
this.txtSend.Text = "客户端发送";
} Socket clientSocket; private void btnStart_Click(object sender, EventArgs e)
{
try
{
IPAddress ip = IPAddress.Parse(this.txtIP.Text.Trim()); IPEndPoint iep = new IPEndPoint(ip,int.Parse(this.txtPort.Text.Trim())); clientSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); clientSocket.Connect(iep); clientSocket.ReceiveTimeout = ; clientSocket.SendTimeout = ; this.lblState.Text = "连接成功"; timer1.Enabled = true; }
catch {
}
} private void timer1_Tick(object sender, EventArgs e)
{
try
{
if (clientSocket != null)
{
if (clientSocket.Connected)
{
byte[] receiveSocket=new byte[];
if(clientSocket.Poll(,SelectMode.SelectRead))
{
int successSocket = clientSocket.Receive(receiveSocket);
if(successSocket!=)
{
this.txtReceive.Text = "服务端" + System.Text.Encoding.UTF8.GetString(receiveSocket,,successSocket);
this.txtReceive.SelectionStart = this.txtReceive.Text.Length;
this.txtReceive.ScrollToCaret();
}
}
}
}
else {
this.lblState.Text = "连接失败!";
} }
catch { }
} private void btnSend_Click(object sender, EventArgs e)
{
try
{
if(clientSocket!=null)
{
if(clientSocket.Connected)
{
string sendMessage = this.txtSend.Text.Trim();
byte[] sendBytes = System.Text.Encoding.UTF8.GetBytes(sendMessage);
int successSendBytes = clientSocket.Send(sendBytes,sendBytes.Length,SocketFlags.None); } }else{
this.lblState.Text="连接失败!";
} }
catch { }
}
}

展示效果如下

Winfrom 基于TCP的Socket 编程的更多相关文章

  1. 【转/TCP协议编程】 基于TCP的Socket 编程

    基于TCP(面向连接)的socket编程,分为客户端和服务器端. 客户端的流程如下: (1)创建套接字(socket) (2)向服务器发出连接请求(connect) (3)和服务器端进行通信(send ...

  2. Java基于TCP的Socket编程练习

    环境:Notpad ++ 6.0 + JDK 6.0.31 问题:使用套接字编写客户-服务器程序,实现客户-服务器交互计算.客户将三角形3个边的长度发给服务器,服务器把计算出的三角形的面积返回给客户. ...

  3. 网络编程学习笔记(二)基于TCP的Socket编程

    1.Socket:英文意思插座.两个Java应用程序可以通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Socket. 2.Socket通常用来实现client-server(客户端 ...

  4. Winfrom 基于TCP的Socket服务端 多线程(进阶版)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.引言 好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不 ...

  6. Python进阶(1)_Socket网络编程(基于tcp的socket)

    网络协议参考:http://www.cnblogs.com/hedeyong/p/6889774.html 一.TCP/IP五层模型 学习socket一定要先学习互联网协议: 1.首先:本节课程的目标 ...

  7. Java Web 基础(一) 基于TCP的Socket网络编程

    一.Socket简单介绍 Socket通信作为Java网络通讯的基础内容,集中了异常.I/O流模式等众多知识点.学习Socket通信,既能够了解真正的网络通讯原理,也能够增强对I/O流模式的理解. 1 ...

  8. Python网络编程03 /缓存区、基于TCP的socket循环通信、执行远程命令、socketserver通信

    Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命令.socketserver通信 目录 Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命 ...

  9. (1)线程的同步机制 (2)网络编程的常识 (3)基于tcp协议的编程模型

    1.线程的同步机制(重点)1.1 基本概念 当多个线程同时访问同一种共享资源时可能会造成数据的覆盖和不一致等问题,此时就需要对线程之间进行协调和通信,该方式就叫线程的同步机制. 如: 2003年左右 ...

随机推荐

  1. DISTINCT后按照DISTINCT之前的某列进行排序

    SELECT 行业名称 FROM 评分标准 GROUP BY 行业名称 ORDER BY MAX(行业ID) DESC

  2. angularJs中的隐藏和显示

    <!DOCTYPE html> <html ng-app="a2_12"> <head> <meta charset="utf- ...

  3. flask test_client设置cookies

    class TestCase(unittest.TestCase): session = None def setUp(self): self.app = create_app() self.app. ...

  4. 光流算法:关于OpenCV读写middlebury网站给定的光流的代码

    Middlebury是每个研究光流算法的人不可能不使用的网站,Middlebury提供了许多标准的测试库,这极大地推进了光流算法的进展.Middlebury提供的标准库,其计算出的光流保存在后缀名为. ...

  5. ecmall程序结构图与常用数据库表

    ecm_acategory:存放的是商城的文章分类.ecm_address:存放的是店长的地址ecm_article:存放的是商城的相关文章ecm_brand:存放的是商城的品牌分类(注意与表ecm_ ...

  6. IntelliJ IDEA显示行号方法

    File->Settings->Editor->General->Appearence->Show line numbers

  7. (转).NET代码混淆实践

    今天突然对反编译.混淆感兴趣,在网上查了一些资料,文章大部分内容来源http://www.cnblogs.com/hsapphire/archive/2010/11/21/1883514.html. ...

  8. CODESOFT都出中文官网了,你还等什么呢

    CODESOFT是先进的标签设计和集成软件,提供了无与伦比的灵活性.功能和世界范围的支持,是企业环境下标签打印的最佳选择.在过去的时间里,CODESOFT从未停止过努力与改进,现如今已推出了最新版本C ...

  9. easyui combo下拉框多选框

    按照自己的方式,先晒下效果图: 选一个值,那么就在input里面显示一个,去掉勾选,那么input就会少一个 其实做法很简单,今天就是快下班了,闲着没事加篇博客而已,下面带上代码. 1.页面的展示,i ...

  10. iOS中常见的设计模式——单例模式\委托模式\观察者模式\MVC模式

    一.单例模式 1. 什么是单例模式? 在iOS应用的生命周期中,某个类只有一个实例. 2. 单例模式解决了什么问题? 想象一下,如果我们要读取文件配置信息,那么每次要读取,我们就要创建一个文件实例,然 ...