Winfrom 基于TCP的Socket 编程
基于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 编程的更多相关文章
- 【转/TCP协议编程】 基于TCP的Socket 编程
基于TCP(面向连接)的socket编程,分为客户端和服务器端. 客户端的流程如下: (1)创建套接字(socket) (2)向服务器发出连接请求(connect) (3)和服务器端进行通信(send ...
- Java基于TCP的Socket编程练习
环境:Notpad ++ 6.0 + JDK 6.0.31 问题:使用套接字编写客户-服务器程序,实现客户-服务器交互计算.客户将三角形3个边的长度发给服务器,服务器把计算出的三角形的面积返回给客户. ...
- 网络编程学习笔记(二)基于TCP的Socket编程
1.Socket:英文意思插座.两个Java应用程序可以通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Socket. 2.Socket通常用来实现client-server(客户端 ...
- Winfrom 基于TCP的Socket服务端 多线程(进阶版)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接
本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.引言 好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不 ...
- Python进阶(1)_Socket网络编程(基于tcp的socket)
网络协议参考:http://www.cnblogs.com/hedeyong/p/6889774.html 一.TCP/IP五层模型 学习socket一定要先学习互联网协议: 1.首先:本节课程的目标 ...
- Java Web 基础(一) 基于TCP的Socket网络编程
一.Socket简单介绍 Socket通信作为Java网络通讯的基础内容,集中了异常.I/O流模式等众多知识点.学习Socket通信,既能够了解真正的网络通讯原理,也能够增强对I/O流模式的理解. 1 ...
- Python网络编程03 /缓存区、基于TCP的socket循环通信、执行远程命令、socketserver通信
Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命令.socketserver通信 目录 Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命 ...
- (1)线程的同步机制 (2)网络编程的常识 (3)基于tcp协议的编程模型
1.线程的同步机制(重点)1.1 基本概念 当多个线程同时访问同一种共享资源时可能会造成数据的覆盖和不一致等问题,此时就需要对线程之间进行协调和通信,该方式就叫线程的同步机制. 如: 2003年左右 ...
随机推荐
- mm
1. 实施例子 http://wenku.baidu.com/view/d01d951dfad6195f312ba6e8.html 2. internal number range即内部给号,指系统 ...
- Webservice测试从头来
一.写WebService 建立java project 建立数据类包 com.parameters.zz 新建Person类 package com.parameters.zz; public cl ...
- dd 命令实时进度监控
dd脚本: #!/bin/sh if [ -d "${1}" ]; then echo "!mkdir" else } fi cd ${} name=`date ...
- 嵌入式X86运行linux及QtEmbedded+触摸屏(X86PC104+Xlinux+QtE+触摸屏解决办法)
嵌入式X86运行linux及QtEmbedded+触摸屏(X86PC104+Xlinux+QtE+触摸屏解决办法) QQ:5724308 邮箱:sankye@163.com
- MySql存储过程学习总结
创建存储过程 1.格式 MySQL存储过程创建的格式:CREATE PROCEDURE 过程名 ([过程参数[,...]]),举个例子: CREATE PROCEDURE proc1 (OUT s ...
- Android——ProgressDialog 进度条对话框
public class ProgressDialogActivity extends Activity { private Button btn_large_pd, btn_horizonta ...
- Appnium安装——Mac篇
mac下搭建appium环境有两种方法: 1.直接下载appium.dmg 运行即可 2.使用node从命令行运行appium Mac下的appnium环境搭建 一.首先安装homebrew 1.首先 ...
- 关于Rational Functional Tester (RFT)的简单介绍
前段时间给客户做了个RFT的简单培训,以下.因为涉及到公司的框架,所以中间省去了很多框架里的细节,只留了一个框架的总体结构的概览. RFT IBM Rational Functional Tester ...
- linux查看内存和回收内存
清理前内存使用情况 free -m free -g echo 1 > /proc/sys/vm/drop_caches 清理后内存使用情况 free -m
- 学习资料 数据查询语言DQL
数据查询语言DQL介绍及其应用: 查询是SQL语言的核心,SQL语言只提供唯一一个用于数据库查询的语句,即SELECT语句.用于表达SQL查询的SELECT语句是功能最强也是最复杂的SQL语句,它提供 ...