1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > [置顶] 【C#】 Socket通讯客户端程序

[置顶] 【C#】 Socket通讯客户端程序

时间:2023-12-07 08:45:40

相关推荐

[置顶]        【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 .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;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。