`
hududanyzd
  • 浏览: 815597 次
文章分类
社区版块
存档分类
最新评论

【C#】 Socket通讯客户端程序

 
阅读更多

这段时间一直在优化Socket通讯这块,经常和Socket打交道,现在分享给大家一个小的案例,

代码如下:

byte[] m_dataBuffer = new byte [10];
IAsyncResult m_result;
public AsyncCallback m_pfnCallBack ;
private System.Windows.Forms.Button btnClear;
public Socket m_clientSocket;

//关闭连接

void ButtonCloseClick(object sender, System.EventArgs e)
{
if ( m_clientSocket != null )
{
m_clientSocket.Close ();
m_clientSocket = null;
}
Close();
}

//连接服务器

void ButtonConnectClick(object sender, System.EventArgs e)
{
// See if we have text on the IP and Port text fields
if(textBoxIP.Text == "" || textBoxPort.Text == ""){
MessageBox.Show("IP Address and Port Number are required to connect to the Server\n");
return;
}
try
{
UpdateControls(false);
// Create the socket instance
m_clientSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp );

// Cet the remote IP address
IPAddress ip = IPAddress.Parse (textBoxIP.Text);
int iPortNo = System.Convert.ToInt16 ( textBoxPort.Text);
// Create the end point
IPEndPoint ipEnd = new IPEndPoint (ip,iPortNo);
// Connect to the remote host
m_clientSocket.Connect ( ipEnd );
if(m_clientSocket.Connected) {

UpdateControls(true);
//Wait for data asynchronously
WaitForData();
}
}
catch(SocketException se)
{
string str;
str = "\nConnection failed, is the server running?\n" + se.Message;
MessageBox.Show (str);
UpdateControls(false);
}
}

//发送消息

void ButtonSendMessageClick(object sender, System.EventArgs e)
{
try
{
string msg = richTextTxMessage.Text;
// New code to send strings
NetworkStream networkStream = new NetworkStream(m_clientSocket);
System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(networkStream);
streamWriter.WriteLine(msg);
streamWriter.Flush();


}
catch(SocketException se)
{
MessageBox.Show (se.Message );
}
}

//等待接收数据

public void WaitForData()
{
try
{
if ( m_pfnCallBack == null )
{
m_pfnCallBack = new AsyncCallback (OnDataReceived);
}
SocketPacket theSocPkt = new SocketPacket ();
theSocPkt.thisSocket = m_clientSocket;
// Start listening to the data asynchronously
m_result = m_clientSocket.BeginReceive (theSocPkt.dataBuffer,
0, theSocPkt.dataBuffer.Length,
SocketFlags.None,
m_pfnCallBack,
theSocPkt);
}
catch(SocketException se)
{
MessageBox.Show (se.Message );
}

}
public class SocketPacket
{
public System.Net.Sockets.Socket thisSocket;
public byte[] dataBuffer = new byte[1024];
}

public void OnDataReceived(IAsyncResult asyn)
{
try
{
SocketPacket theSockId = (SocketPacket)asyn.AsyncState ;
int iRx = theSockId.thisSocket.EndReceive (asyn);
char[] chars = new char[iRx + 1];
System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
int charLen = d.GetChars(theSockId.dataBuffer, 0, iRx, chars, 0);
System.String szData = new System.String(chars);
richTextRxMessage.Text = richTextRxMessage.Text + szData;
WaitForData();
}
catch (ObjectDisposedException )
{
System.Diagnostics.Debugger.Log(0,"1","\nOnDataReceived: Socket has been closed\n");
}
catch(SocketException se)
{
MessageBox.Show (se.Message );
}
}
private void UpdateControls( bool connected )
{
buttonConnect.Enabled = !connected;
buttonDisconnect.Enabled = connected;
string connectStatus = connected? "Connected" : "Not Connected";
textBoxConnectStatus.Text = connectStatus;
}
void ButtonDisconnectClick(object sender, System.EventArgs e)
{
if ( m_clientSocket != null )
{
m_clientSocket.Close();
m_clientSocket = null;
UpdateControls(false);
}
}
//----------------------------------------------------
// This is a helper function used (for convenience) to
// get the IP address of the local machine
//----------------------------------------------------
String GetIP()
{
String strHostName = Dns.GetHostName();

// Find host by name
IPHostEntry iphostentry = Dns.GetHostByName(strHostName);

// Grab the first IP addresses
String IPStr = "";
foreach(IPAddress ipaddress in iphostentry.AddressList){
IPStr = ipaddress.ToString();
return IPStr;
}
return IPStr;
}


分享到:
评论

相关推荐

    C#利用Socket实现客户端之间直接通信

    C#利用Socket实现客户端之间直接通信 实验功能:  设计程序,分别构建通信的两端:服务器端和客户端应用程序,套接字类型为面向连接的Socket,自己构建双方的应答模式,实现双方的数据的发送和接收(S发给C,C发给S)...

    c# socket同步通讯 异步通讯 客户端 服务端 实例

    本文将深入探讨C#中的Socket同步通讯与异步通讯,以及如何构建客户端和服务端程序。 首先,让我们了解什么是Socket。Socket是网络通信的基本单元,它允许应用程序通过网络发送和接收数据。在C#中,Socket类位于...

    C# Socket通讯框架,封装了Client和Server端类库,带实例

    本篇将详细介绍基于C#语言的Socket通讯框架,该框架已经封装了客户端(Client)和服务器端(Server)的类库,并提供了实例演示和使用手册,方便开发者快速理解和应用。 首先,让我们了解什么是Socket。Socket是操作...

    C# Socket通讯/TCP通讯,完整代码demo

    本示例提供了一个完整的C# Socket通讯/TCP通讯的代码demo,旨在帮助开发者理解和应用网络通信技术。 首先,我们要理解Socket的基本概念。Socket在计算机网络中扮演着桥梁的角色,它允许两台计算机通过网络进行数据...

    C#使用Socket实现服务器与多个客户端通信(简单的聊天系统)

    在本文中,我们将深入探讨如何使用C#编程语言通过Socket实现一个简单的聊天系统,使得服务器可以与多个客户端进行通信。Socket在计算机网络编程中扮演着重要角色,它提供了进程间通信(IPC)的能力,允许不同计算机...

    C# Socket通讯DEMO

    本文将深入探讨“C# Socket通讯DEMO”中的关键知识点,包括Socket的基本概念、C#中Socket的使用、服务端与客户端的构建,以及如何实现简单的聊天功能。 1. **Socket基础**: Socket,通常被称为套接字,是网络通信...

    c#Socket客户端断线重连

    在C#中,Socket编程是网络通信的基础,用于实现客户端与服务器之间的数据传输。当遇到网络不稳定或服务器临时故障等情况时,客户端可能会突然断开连接。为了保证服务的连续性和可靠性,我们需要实现一个能自动断线重...

    C#编写socket做服务器和客户端例子

    本篇将深入讲解如何使用C#编写Socket服务器和客户端,以及相关的关键知识点。 一、Socket简介 Socket是网络通信的基础接口,它允许应用程序通过Internet进行通信。在C#中,System.Net.Sockets命名空间提供了Socket...

    C#SOCKET 客户端与主机通讯多线程实现

    在这个“C# SOCKET 客户端与主机通讯多线程实现”主题中,我们将深入探讨如何利用C#的Socket类以及多线程技术来构建一个可靠的通信系统。 首先,我们要理解Socket的工作原理。Socket是网络编程中的一个抽象概念,它...

    C#基于socket通讯客户端

    以上就是C#基于Socket通讯客户端的基本步骤。在实际应用中,可能还需要考虑心跳机制、重连策略、错误处理、数据编码解码等问题。通过持续学习和实践,开发者可以熟练掌握Socket通信,为构建高效稳定的网络应用打下...

    C#socket通信(客户端和服务端)

    本文将深入探讨C#语言下的Socket通信,特别关注客户端和服务端的实现。我们基于Visual Studio 2013进行开发,该环境提供了强大的支持和便利性。 首先,让我们了解什么是Socket。Socket是操作系统提供的一种进程间...

    C# SOCKET 通讯例子

    在"C# SOCKET 通讯例子"中,我们有两个关键部分:通讯Client端和通讯Server端。以下是这两个部分的简要概述: 1. **通讯Server端**: - 创建Socket对象并绑定到特定的IP地址和端口号,这通常使用`Socket.Bind()`...

    c#socket断开重连

    在IT行业中,网络通信是不可或缺的一部分,而C#语言提供了强大的Socket编程接口,...在提供的`c#Socket断开重连.cs`源代码文件中,应包含这些功能的具体实现,读者可以通过阅读和分析代码来深入理解相关概念和技术。

    C# Socket通信(winform) 异步发送消息,服务端客户端通信,可以发送消息和文件并进行接收

    C# Socket通信(winform) 异步发送消息,服务端客户端通信,可以发送消息和文件并进行接收,代码注释详细 C# Socket通信(winform) 异步发送消息,服务端客户端通信,可以发送消息和文件并进行接收,代码注释详细 ...

    利用C#实现SSLSocket加密通讯的方法详解

    「C#实现SSLSocket加密通讯方法详解」 在网络通讯中,安全性是一个非常重要的方面,而SSL/TLS协议则...使用C#实现SSLSocket加密通讯需要生成数字证书、创建服务器端和客户端程序,并使用这些证书进行认证和加密通讯。

    C#简易Socket通讯工具

    Socket通讯在IT行业中是网络编程的基础,特别是在C#这样的多用途编程语言中,Socket通信扮演着重要的角色。本文将深入探讨C#中的Socket通信,帮助理解其原理、使用方法及其实现简易通信工具的关键步骤。 Socket是...

    C# socket通讯服务端

    本篇文章将深入探讨“C# Socket通讯服务端”这一主题,结合提供的压缩包文件,我们将分析其组成部分并揭示其中的关键知识点。 首先,我们要理解Socket的基本概念。Socket,又称套接字,是网络通信中的接口,允许...

    C#串口通讯和socket通讯demo

    总结起来,`CSharpPort`提供的代码示例涵盖了C#环境下串口通讯和Socket通讯的基础应用。通过学习和分析这些代码,开发者可以更好地掌握如何在C#环境中实现设备间的串口通信和网络间的Socket通信,为开发相关项目打下...

    基于C#的即时通讯客户端源码.zip

    【标题】"基于C#的即时通讯客户端源码"提供了深入了解C#编程语言在构建实时通信应用程序方面的应用。即时通讯客户端通常涉及到网络编程、多线程处理、数据序列化和用户界面设计等多个技术领域,而C#作为一种面向对象...

    C#语言编写的Socket通信客户端和服务端

    本项目聚焦于使用C#的Socket类来构建客户端和服务端应用程序,实现两者的交互。 Socket通信是基于TCP/IP协议栈的一种通信方式,它为进程间通信(IPC)提供了低级别的、原始的网络数据传输接口。在C#中,`System.Net...

Global site tag (gtag.js) - Google Analytics