基于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. win xp32位与64位怎么查看是多少位系统

    方法一: Windows XP/Server2003几乎都是32位的操作系统 1. 单击“开始”,然后单击“运行”. 2. 在“打开”框中,键入cmd(再键入systeminfo)或者winmsd.e ...

  2. 数组排序-冒泡排序-选择排序-插入排序-希尔排序-快速排序-Java实现

    这五种排序算法难度依次增加. 冒泡排序: 第一次将数组相邻两个元素依次比较,然后将大的元素往后移,像冒泡一样,最终最大的元素被移到数组的最末尾. 第二次将数组的前n-1个元素取出,然后相邻两个元素依次 ...

  3. Android 上的代码阅读器 CoderBrowserHD 修改支持 go 语言代码

    我在Android上的代码阅读器用的是 https://github.com/zerob13/CoderBrowserHD 改造的版本,改造后的版本我放在 https://github.com/ghj ...

  4. PYTHON ASYNCIO: FUTURE, TASK AND THE EVENT LOOP

    from :http://masnun.com/2015/11/20/python-asyncio-future-task-and-the-event-loop.html Event Loop On ...

  5. C#局域网聊天工具_UDP广播

    接上一讲,程序启动就要发送广播消息,如何发送广播消息,这一讲将给大家好好讲讲网络广播的知识,以及C#如何实现广播. 第一部分.什么是广播地址,以及广播地址怎么计算 1.1 广播地址是什么? 主机号全为 ...

  6. python 字典实现类似c的switch case

    #python 字典实现类似c的switch def print_hi(): print('hi') def print_hello(): print('hello') def print_goodb ...

  7. 将assembly包添加到自己的maven仓库

    mvn install:install-file -DgroupId=com.asiainfo -DartifactId=spark-assembly -Dversion=1.2.0 -Dpackag ...

  8. 转载 radio值获取

    选择控件:select ,radio,checkbox之用jquery获取选中值的小结 博客分类: jQuery select下拉框radio单选按钮checkbox多选框jquery获取选中的值  ...

  9. 用C#编写游戏脚本

    大学宿舍玩游戏的时候,为了简化重复的键鼠动作,有学习过按键精灵和TC脚本开发工具,并做了一些小脚本,基本达到了当时的需求.不知不觉,已经毕业了3年了,无聊之余又玩起了游戏,对于一些无趣的重复行为,于是 ...

  10. jboss7访问日志功能及使用goaccess工具分析

    网络上虽然很多文章分别讲到jboss7的访问日志如何配置,goaccess工具怎么分析nginx/tomcat等日志.但将两者放在一起即“通过goaccess分析jboss访问日志”的倒是没搜索到. ...