`
yizhyi
  • 浏览: 62016 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

DotNET(C#) Socket基本编程

    博客分类:
  • .net
阅读更多

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# 网络编程之socket tcp 通讯demo样例

    这个"C# 网络编程之socket tcp 通讯demo样例"可能涵盖了这些基本操作,为初学者提供了理解TCP通信机制的起点。通过阅读和理解代码,你可以了解到如何在C#中建立和管理TCP连接,以及如何进行数据的收发。对于进一步的...

    C# .NET中Socket简单实用框架的使用教程

    在C# .NET环境中,Socket是用于网络通信的基础组件,它提供了对TCP/IP协议栈的低级别访问。本文将深入探讨如何在C# .NET中使用Socket构建一个简单实用的框架,以提升项目的可扩展性、健壮性和容错率。 首先,我们...

    c# Socket 实现源码

    C#中的Socket编程是网络通信的核心技术之一,主要用于构建客户端-服务器应用程序。在这个实例中,我们将探讨如何使用C#的System.Net.Sockets命名空间中的Socket类来实现TCP Socket通信。TCP(传输控制协议)是一种...

    dotnet C# 获取一个可用的端口的方法.rar

    在.NET框架和C#编程中,获取一个可用的端口是常见的需求,特别是在开发网络...本资源包中的“dotnet C# 获取一个可用的端口的方法.md”文档,应当详细介绍了这些概念和实践技巧,是学习和开发过程中的一份宝贵资料。

    socket在C#中的使用

    在C#中,利用.NET Framework提供的`System.Net.Sockets`命名空间,开发者可以方便地进行Socket编程。 #### 二、Socket的基本概念 - **Socket**: 一个端到端的通信通道。 - **TCP (Transmission Control Protocol)**...

    FastDFSClient C#源码

    这涉及到网络编程的基础知识,如Socket编程和线程安全的连接管理。 2. 文件上传:客户端通过调用上传接口,将本地文件分块上传到FastDFS服务器。这个过程可能涉及到文件流操作、多线程并行上传、断点续传等技术。 ...

    DotNet基础类大全

    "DotNet基础类大全"这个主题涵盖的内容广泛,包括了.NET开发中的基础概念、常用类库和编程模式。下面将详细阐述其中的一些关键知识点: 1. **.NET Framework与.NET Core**: .NET Framework是微软早期推出的开发平台...

    C#常用类库(100多个)

    "C#常用类库(100多个)"这个资源包涵盖了众多实用的编程领域,包括文件处理、网络通信、HTTP交互、多线程、UI控件、Office文档操作、输入/输出(I/O)操作、JSON序列化与反序列化、压缩与解压、文本处理、正则表达式...

    dotNet的聊天源码

    【标题】"dotNet的聊天源码"是一个基于.NET框架的聊天应用的源代码,它展示了如何使用C#编程语言来构建一个实时通信系统。在.NET框架中,C#是常用于开发桌面应用、Web应用和服务的重要语言。这个源码项目可能包含...

    C#Ftp操作源代码,

    - FTP协议的实现通常涉及Socket编程,因为FTP命令和数据传输可能需要独立的连接。在C#中,Socket类提供了低级别的网络通信接口,可以用来创建和管理TCP连接。 4. **流(Stream)**: - 在C#中,流是处理数据的基本...

    DotNet做的QQ

    【标题】"DotNet做的QQ"揭示了这个项目是使用微软的.NET框架,特别是C#编程语言实现的一个QQ客户端仿制品。.NET框架是微软推出的一款用于构建、部署和运行应用程序的强大平台,它包含了丰富的类库,支持多种编程语言...

    Windows.NET编程系列视频课程(32集)

    - **Socket编程**:实现客户端与服务器之间的通信。 - **Web服务**:创建RESTful API或SOAP服务,支持跨平台调用。 - **ASP.NET Core**:介绍基于.NET Core的新一代Web应用框架。 #### 7. 性能优化与测试 - **性能...

    用C#实现短信收发

    在C#中,我们可以使用System.Net命名空间下的Socket类来实现TCP/IP通信,这对于基于SMPP的短信服务尤为重要。另外,System.Net.Mail命名空间中的SmtpClient和MailMessage类则可以用来实现基于SMTP的短信服务,虽然这...

    dotnet

    在C#中进行网络编程,通常会用到System.Net命名空间下的类,如Socket、TcpClient、TcpListener、HttpClient等。Socket类提供了低级别的网络通信接口,而TcpClient和TcpListener则为基于TCP的网络通信提供了一种更加...

    c#开发源码

    7. **网络通信**:C#提供Socket和HttpClient等类用于网络通信, DotNet.Utilities可能封装了这些类,提供了更易用的接口,如HTTP请求、TCP/IP通信等。 8. **XML和JSON序列化/反序列化**:在数据交换中,XML和JSON是...

    Client-dotnet.rar_csharp client

    在C#中,实现这样的功能可能会用到System.Net命名空间下的类,如Socket或HttpClient,以及可能的异步编程模型来处理网络请求。 基于“csharp_client”的标签,我们可以推测这个项目可能包含以下关键知识点: 1. C#...

    C# 手机QQ协议demo1.rar

    1. **网络通信**:C#中的`System.Net`命名空间提供了Socket类,可以用来创建TCP/IP连接,实现数据的发送和接收。手机QQ协议通常基于TCP或UDP协议进行数据传输。 2. **序列化与反序列化**:为了解析手机QQ协议的...

    indy for c#

    Indy(Internet Direct)是一个广泛使用的网络通信库,最初为Delphi和FreePascal编程语言设计,但现在已扩展到支持.NET框架,包括C#。这个强大的组件集合为开发者提供了构建各种网络应用程序的能力,如FTP、HTTP、...

Global site tag (gtag.js) - Google Analytics