- 浏览: 62016 次
- 性别:
- 来自: 上海
最新评论
-
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 1812全面剖析C#正则表达式 ... -
水晶报表注册码(收藏)
2006-06-07 16:56 2073水晶报表注册码(收藏) <script language ... -
C#中直接调用VB.NET的函数,兼论半角与全角、简繁体中文互相转化
2006-06-15 11:25 1044在C#项目中添加引用Microsoft.VisualBasic ... -
用C#生成随机中文汉字验证码的基本原理
2006-06-21 13:54 8061、汉字编码原理 到底怎么办到随机生成汉字的呢?汉字从哪里来的 ... -
用反射调用任意.net库中的方法
2006-06-21 13:55 634注: 1、ReturnMessage 是我自写的一个类,作用请 ... -
.NET框架和VS.NET中的SOAP
2006-06-21 13:56 678简介<o:p></o:p> <o ... -
.NET框架中基于角色的安全性
2006-06-21 13:57 642概述<o:p></o:p> < ... -
解读C#中的规则表达式
2006-07-25 13:50 597多少年来,许多的编程 ... -
解读C#中的规则表达式
2006-07-25 13:50 683多少年来,许多的编程 ... -
ASP.NET程序中常用的三十三种代码
2006-08-24 17:12 6771. 打开新的窗口并传送参数: 传送参数:response ... -
打造一个通用ASP.NET数据分页控件
2006-08-24 17:14 1060打 ... -
.net的优点
2008-03-10 13:55 14011.标准集成:XML、SOAP及其它 过去,微软的体系结构建立 ... -
ASP.NET的优点与缺点
2008-03-10 13:57 3576一. ASP.NET的演变:DENALI ASP 的第一个测试 ... -
回头看.Net的优点与进步
2008-03-10 13:58 945最近公司要竞标一个项目,对方指定要.Net,因此又重操旧业, ... -
c#学习笔记(1)
2008-03-10 14:11 7681, 结构(struct) 与 类(class)[attrib ... -
Web Service中保持ASP.net的状态
2008-03-11 12:44 1935简介 网络程序开发 ... -
c#面试题及答案
2008-03-13 16:30 2858c#面试题及答案 2 .列举 ...
相关推荐
这个"C# 网络编程之socket tcp 通讯demo样例"可能涵盖了这些基本操作,为初学者提供了理解TCP通信机制的起点。通过阅读和理解代码,你可以了解到如何在C#中建立和管理TCP连接,以及如何进行数据的收发。对于进一步的...
在C# .NET环境中,Socket是用于网络通信的基础组件,它提供了对TCP/IP协议栈的低级别访问。本文将深入探讨如何在C# .NET中使用Socket构建一个简单实用的框架,以提升项目的可扩展性、健壮性和容错率。 首先,我们...
C#中的Socket编程是网络通信的核心技术之一,主要用于构建客户端-服务器应用程序。在这个实例中,我们将探讨如何使用C#的System.Net.Sockets命名空间中的Socket类来实现TCP Socket通信。TCP(传输控制协议)是一种...
在.NET框架和C#编程中,获取一个可用的端口是常见的需求,特别是在开发网络...本资源包中的“dotnet C# 获取一个可用的端口的方法.md”文档,应当详细介绍了这些概念和实践技巧,是学习和开发过程中的一份宝贵资料。
在C#中,利用.NET Framework提供的`System.Net.Sockets`命名空间,开发者可以方便地进行Socket编程。 #### 二、Socket的基本概念 - **Socket**: 一个端到端的通信通道。 - **TCP (Transmission Control Protocol)**...
这涉及到网络编程的基础知识,如Socket编程和线程安全的连接管理。 2. 文件上传:客户端通过调用上传接口,将本地文件分块上传到FastDFS服务器。这个过程可能涉及到文件流操作、多线程并行上传、断点续传等技术。 ...
"DotNet基础类大全"这个主题涵盖的内容广泛,包括了.NET开发中的基础概念、常用类库和编程模式。下面将详细阐述其中的一些关键知识点: 1. **.NET Framework与.NET Core**: .NET Framework是微软早期推出的开发平台...
"C#常用类库(100多个)"这个资源包涵盖了众多实用的编程领域,包括文件处理、网络通信、HTTP交互、多线程、UI控件、Office文档操作、输入/输出(I/O)操作、JSON序列化与反序列化、压缩与解压、文本处理、正则表达式...
【标题】"dotNet的聊天源码"是一个基于.NET框架的聊天应用的源代码,它展示了如何使用C#编程语言来构建一个实时通信系统。在.NET框架中,C#是常用于开发桌面应用、Web应用和服务的重要语言。这个源码项目可能包含...
- FTP协议的实现通常涉及Socket编程,因为FTP命令和数据传输可能需要独立的连接。在C#中,Socket类提供了低级别的网络通信接口,可以用来创建和管理TCP连接。 4. **流(Stream)**: - 在C#中,流是处理数据的基本...
【标题】"DotNet做的QQ"揭示了这个项目是使用微软的.NET框架,特别是C#编程语言实现的一个QQ客户端仿制品。.NET框架是微软推出的一款用于构建、部署和运行应用程序的强大平台,它包含了丰富的类库,支持多种编程语言...
- **Socket编程**:实现客户端与服务器之间的通信。 - **Web服务**:创建RESTful API或SOAP服务,支持跨平台调用。 - **ASP.NET Core**:介绍基于.NET Core的新一代Web应用框架。 #### 7. 性能优化与测试 - **性能...
在C#中,我们可以使用System.Net命名空间下的Socket类来实现TCP/IP通信,这对于基于SMPP的短信服务尤为重要。另外,System.Net.Mail命名空间中的SmtpClient和MailMessage类则可以用来实现基于SMTP的短信服务,虽然这...
在C#中进行网络编程,通常会用到System.Net命名空间下的类,如Socket、TcpClient、TcpListener、HttpClient等。Socket类提供了低级别的网络通信接口,而TcpClient和TcpListener则为基于TCP的网络通信提供了一种更加...
7. **网络通信**:C#提供Socket和HttpClient等类用于网络通信, DotNet.Utilities可能封装了这些类,提供了更易用的接口,如HTTP请求、TCP/IP通信等。 8. **XML和JSON序列化/反序列化**:在数据交换中,XML和JSON是...
在C#中,实现这样的功能可能会用到System.Net命名空间下的类,如Socket或HttpClient,以及可能的异步编程模型来处理网络请求。 基于“csharp_client”的标签,我们可以推测这个项目可能包含以下关键知识点: 1. C#...
1. **网络通信**:C#中的`System.Net`命名空间提供了Socket类,可以用来创建TCP/IP连接,实现数据的发送和接收。手机QQ协议通常基于TCP或UDP协议进行数据传输。 2. **序列化与反序列化**:为了解析手机QQ协议的...
Indy(Internet Direct)是一个广泛使用的网络通信库,最初为Delphi和FreePascal编程语言设计,但现在已扩展到支持.NET框架,包括C#。这个强大的组件集合为开发者提供了构建各种网络应用程序的能力,如FTP、HTTP、...