- 浏览: 59292 次
- 性别:
- 来自: 上海
最新评论
-
feipigzi:
我觉得文章内容不如改成四个字——“顾名思义”
FRAMESET和IFRAME各自的优点和缺点 -
yuchujin:
这个也太短了吧
FRAMESET和IFRAME各自的优点和缺点
Socket基本编程
服务端:
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
Thread mythread ;
Socket socket;
// 清理所有正在使用的资源。
protected override void Dispose( bool disposing )
{
try
{
socket.Close();//释放资源
mythread.Abort ( ) ;//中止线程
}
catch{ }
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
public static IPAddress GetServerIP()
{
IPHostEntry ieh=Dns.GetHostByName(Dns.GetHostName());
return ieh.AddressList[0];
}
private void BeginListen()
{
IPAddress ServerIp=GetServerIP();
IPEndPoint iep=new IPEndPoint(ServerIp,8000);
socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
byte[] byteMessage=new byte[100];
this.label1.Text=iep.ToString();
socket.Bind(iep);
// do
while(true)
{
try
{
socket.Listen(5);
Socket newSocket=socket.Accept();
newSocket.Receive(byteMessage);
string sTime = DateTime.Now.ToShortTimeString ( ) ;
string msg=sTime+":"+"Message from:";
msg+=newSocket.RemoteEndPoint.ToString()+Encoding.Default.GetString(byteMessage);
this.listBox1.Items.Add(msg);
}
catch(SocketException ex)
{
this.label1.Text+=ex.ToString();
}
}
// while(byteMessage!=null);
}
//开始监听
private void button1_Click(object sender, System.EventArgs e)
{
try
{
mythread = new Thread(new ThreadStart(BeginListen));
mythread.Start();
}
catch(System.Exception er)
{
MessageBox.Show(er.Message,"完成",MessageBoxButtons.OK,MessageBoxIcon.Stop);
}
}
客户端:
using System.Net;
using System.Net.Sockets;
using System.Text;
private void button1_Click(object sender, System.EventArgs e)
{
BeginSend();
}
private void BeginSend()
{
string ip=this.txtip.Text;
string port=this.txtport.Text;
IPAddress serverIp=IPAddress.Parse(ip);
int serverPort=Convert.ToInt32(port);
IPEndPoint iep=new IPEndPoint(serverIp,serverPort);
byte[] byteMessage;
// do
// {
Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
socket.Connect(iep);
byteMessage=Encoding.ASCII.GetBytes(textBox1.Text);
socket.Send(byteMessage);
socket.Shutdown(SocketShutdown.Both);
socket.Close();
// }
// while(byteMessage!=null);
}
基于TCP协议的发送和接收端
TCP协议的接收端
using System.Net.Sockets ; //使用到TcpListen类
using System.Threading ; //使用到线程
using System.IO ; //使用到StreamReader类
int port = 8000; //定义侦听端口号
private Thread thThreadRead; //创建线程,用以侦听端口号,接收信息
private TcpListener tlTcpListen; //侦听端口号
private bool blistener = true; //设定标示位,判断侦听状态
private NetworkStream nsStream; //创建接收的基本数据流
private StreamReader srRead;
private System.Windows.Forms.StatusBar statusBar1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.ListBox listBox1; //从网络基础数据流中读取数据
private TcpClient tcClient ;
private void Listen ( )
{
try
{
tlTcpListen = new TcpListener ( port ) ; //以8000端口号来初始化TcpListener实例
tlTcpListen.Start ( ) ; //开始监听
statusBar1.Text = "正在监听..." ;
tcClient = tlTcpListen.AcceptTcpClient ( ) ; //通过TCP连接请求
nsStream = tcClient.GetStream ( ) ; //获取用以发送、接收数据的网络基础数据流
srRead=new StreamReader(nsStream);//以得到的网络基础数据流来初始化StreamReader实例
statusBar1.Text = "已经连接!";
while( blistener ) //循环侦听
{
string sMessage = srRead.ReadLine();//从网络基础数据流中读取一行数据
if ( sMessage == "STOP" ) //判断是否为断开TCP连接控制码
{
tlTcpListen.Stop(); //关闭侦听
nsStream.Close(); //释放资源
srRead.Close();
statusBar1.Text = "连接已经关闭!" ;
thThreadRead.Abort(); //中止线程
return;
}
string sTime = DateTime.Now.ToShortTimeString ( ) ; //获取接收数据时的时间
listBox1.Items.Add ( sTime + " " + sMessage ) ;
}
}
catch ( System.Security.SecurityException )
{
MessageBox.Show ( "侦听失败!" , "错误" ) ;
}
}
//开始监听
private void button1_Click(object sender, System.EventArgs e)
{
thThreadRead = new Thread ( new ThreadStart ( Listen ) );
thThreadRead.Start();//启动线程
button1.Enabled=false;
}
// 清理所有正在使用的资源。
protected override void Dispose( bool disposing )
{
try
{
tlTcpListen.Stop(); //关闭侦听
nsStream.Close();
srRead.Close();//释放资源
thThreadRead.Abort();//中止线程
}
catch{}
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
TCP协议的发送端
using System.Net.Sockets; //使用到TcpListen类
using System.Threading; //使用到线程
using System.IO; //使用到StreamWriter类
using System.Net; //使用IPAddress类、IPHostEntry类等
private StreamWriter swWriter; //用以向网络基础数据流传送数据
private NetworkStream nsStream; //创建发送数据的网络基础数据流
private TcpClient tcpClient;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.StatusBar statusBar1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2; //通过它实现向远程主机提出TCP连接申请
private bool tcpConnect = false; //定义标识符,用以表示TCP连接是否建立
//连接
private void button1_Click(object sender, System.EventArgs e)
{
IPAddress ipRemote ;
try
{
ipRemote = IPAddress.Parse ( textBox1.Text ) ;
}
catch //判断给定的IP地址的合法性
{
MessageBox.Show ( "输入的IP地址不合法!" , "错误提示!" ) ;
return ;
}
IPHostEntry ipHost ;
try
{
ipHost = Dns.Resolve ( textBox1.Text ) ;
}
catch //判断IP地址对应主机是否在线
{
MessageBox.Show ("远程主机不在线!" , "错误提示!" ) ;
return ;
}
string sHostName = ipHost.HostName ;
try
{
TcpClient tcpClient = new TcpClient(sHostName,8000);//对远程主机的8000端口提出TCP连接申请
nsStream = tcpClient.GetStream();//通过申请,并获取传送数据的网络基础数据流
swWriter = new StreamWriter(nsStream);//使用获取的网络基础数据流来初始化StreamWriter实例
button1.Enabled = false ;
button2.Enabled = true ;
tcpConnect = true ;
statusBar1.Text = "已经连接!" ;
}
catch
{
MessageBox.Show ( "无法和远程主机8000端口建立连接!" , "错误提示!" ) ;
return ;
}
}
//发送
private void button2_Click(object sender, System.EventArgs e)
{
if (textBox2.Text !="")
{
swWriter.WriteLine(textBox2.Text);//刷新当前数据流中的数据
swWriter.Flush();
}
else
{
MessageBox.Show("发送信息不能为空!","错误提示!");
}
}
// 清理所有正在使用的资源。
protected override void Dispose( bool disposing )
{
if ( tcpConnect )
{
swWriter.WriteLine ( "STOP" ) ; //发送控制码
swWriter.Flush (); //刷新当前数据流中的数据
nsStream.Close (); //清除资源
swWriter.Close ();
}
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
发表评论
-
全面剖析C#正则表达式
2006-06-07 16:52 1775全面剖析C#正则表达式 ... -
水晶报表注册码(收藏)
2006-06-07 16:56 2022水晶报表注册码(收藏) <script language ... -
C#中直接调用VB.NET的函数,兼论半角与全角、简繁体中文互相转化
2006-06-15 11:25 980在C#项目中添加引用Microsoft.VisualBasic ... -
用C#生成随机中文汉字验证码的基本原理
2006-06-21 13:54 7721、汉字编码原理 到底怎么办到随机生成汉字的呢?汉字从哪里来的 ... -
用反射调用任意.net库中的方法
2006-06-21 13:55 587注: 1、ReturnMessage 是我自写的一个类,作用请 ... -
.NET框架和VS.NET中的SOAP
2006-06-21 13:56 611简介<o:p></o:p> <o ... -
.NET框架中基于角色的安全性
2006-06-21 13:57 573概述<o:p></o:p> < ... -
解读C#中的规则表达式
2006-07-25 13:50 555多少年来,许多的编程 ... -
解读C#中的规则表达式
2006-07-25 13:50 616多少年来,许多的编程 ... -
ASP.NET程序中常用的三十三种代码
2006-08-24 17:12 6291. 打开新的窗口并传送参数: 传送参数:response ... -
打造一个通用ASP.NET数据分页控件
2006-08-24 17:14 1015打 ... -
.net的优点
2008-03-10 13:55 13121.标准集成:XML、SOAP及其它 过去,微软的体系结构建立 ... -
ASP.NET的优点与缺点
2008-03-10 13:57 3499一. ASP.NET的演变:DENALI ASP 的第一个测试 ... -
回头看.Net的优点与进步
2008-03-10 13:58 894最近公司要竞标一个项目,对方指定要.Net,因此又重操旧业, ... -
c#学习笔记(1)
2008-03-10 14:11 7301, 结构(struct) 与 类(class)[attrib ... -
Web Service中保持ASP.net的状态
2008-03-11 12:44 1884简介 网络程序开发 ... -
c#面试题及答案
2008-03-13 16:30 2735c#面试题及答案 2 .列举 ...
相关推荐
.net dotnet C# Socket 同步,异步 编程实例
C#dotnet同步异步SOCKET通讯和多线程总结
最近一个项目因为要用到Socket传输问题,所以决定学习一下,将自己学习的内容总结分享出来,下面这篇文章主要给大家介绍了关于C# .NET中Socket简单实用框架使用的相关资料,文中通过示例代码介绍的非常详细,需要的...
是初学者学习socket 编程的最好实例,能够帮助快速理解socket的原理和应用。
dotnet C# 生成二维码,测试生成1万次大约用时12s,能生成各种大小的二维码。
DotNet,Socket聊天室程序,添加自动客户端自动应答功能
dotnet C# 将网页内容存为图片,执行时可能会遇到权限设置的问题,请正确设置
能在linux(epoll)运行基于C# .net standard2.0 写的socket框架,可使用dotnet core程序集 安装NuGet: https://www.nuget.org/packages/socket.core/ Package Manager: Install-Package socket.core .Net CLI :...
MapObjects三维直方图专题组件 + 源码(DotNet C#)
dotnet安全编程样例dotnet安全编程样例dotnet安全编程样例dotnet安全编程样例
网上收集的用C#开发的一个符合61850的框架,希望对大家有帮助,也希望正在研究这方面的兄弟多提供点相关的资料,大家共同进步。
.net4平台与C#4.0高级编程 PRO_CSharp_And_DotNET_4_PlatForm
本软件是一个VS编译工具,是目前体积最小的VS编译器,支持c#、vb.net,支持winform和webform语言虽不能完全替代Visual studio,不过在没有Visual studio时,应急用下,还是不错的,此为dotNet1.1环境。 ------------...
SocketIOCP一个 用 C# Socket 实现 的 IOCP这是一个 用 C# Socket 实现 的 IOCP 。采用 Listener + Dispatch + Worker 的 设计, Listener 是一个线程, Dispatch 是一个线程, Worker 是 一组线程 。一个 Socket ...
c# 网络编程 SOCKET 原理 我在网上下的
跟师傅学编程快一年了,一年来师傅分享了很多积累了很多年的宝贝,自己也在网络上搜罗了一下。有字符串操作,XML操作类,常用网络解析类,正则表达式,验证码,解压缩,文件操作等等60余个类文件动态库文件哦。其实...
SuperSocket是一个轻量级,跨平台和可扩展socket服务器应用程序框架
C# dotnet处理图片
众核、并行计算飞速发展。C#.net framework 4.0最新并行编程(英文版)。
DotNet程序编程规范