基于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. 基于Maven的Springboot+Mybatis+Druid+Swagger2+mybatis-generator框架环境搭建

    基于Maven的Springboot+Mybatis+Druid+Swagger2+mybatis-generator框架环境搭建 前言 最近做回后台开发,重新抓起以前学过的SSM(Spring+Sp ...

  2. 使用maven构建一个helloworld maven项目

    1.下载maven http://maven.apache.org/ 选择一个较新版本下下来 2.配置m2_home环境变量 先解压,新建用户变量m2_home,将bin目录添加到path变量中 3. ...

  3. 《一课经济学》书摘笔记I

    人在经济活动中追求私利的天性,以及天生短视的倾向(即总是只关注某项政策的即时影响,或者只关注政策对某个特殊群体产生的影响,而不去探究那项政策对所有群体造成的长远影响)以上种种致使经济规律的研究复杂艰难 ...

  4. JDBC中的批量插入和乱码解决

    字符集-乱码问题 用JDBC访问MySql数据库的时候,如果JDBC使用的字符集和MySql使用的字符集不一致,那么会导致乱码发生.解决办法当时是在使用JDBC的时候指定和数据库一样的字符集.我们可以 ...

  5. bootstrap在jsp中怎么没有效果?

    页面顶部<!DOCTYPE html> 

  6. eclipse导入myeclipse的web项目

    1.import> 2.进入项目目录,找到.project文件,打开 3.找到<natures> ...</natures>代码段,添加如下标签内容并保存 <nat ...

  7. ckfinder的配置使用

    1.单纯的上传图片和预览图片 修改configasp中CheckAuthentication = true; 否则的话会报没有权限或修改配置错误 此时如果可以查看的话,单击图片应该是放大并且预览图片 ...

  8. django 模板if判断的时候==两边需要有空格

    比如 {%if a=='y'%}错误,{%if a =='y'%}也是错误的 只能是{%if a == 'y'%}这样才行

  9. LayoutInflater.Factory的夜间模式

    自定义实现个Factory,可以用来解析自定义的属性.public interface Factory { /** * Hook you can supply that is called when ...

  10. Troubleshooting 'library cache: mutex X' Waits.

    What is a 'library cache: mutex X' wait? The mutex feature is a mechanism to control access to in me ...