Server代碼
using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
![]()
![]()
namespace SocketSvr
{
class Program
{
private static byte[] msgBuff = new byte[10240];
//private static Socket clientSocket;
const int nListenPort = 8888;
![]()
static void Main(string[] args)
{
Socket Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
![]()
IPHostEntry myIpHostEntry = Dns.GetHostEntry("sitd-RogerWang");
IPEndPoint myIpEndPoint = new IPEndPoint(myIpHostEntry.AddressList[0],nListenPort);
Listener.Bind(myIpEndPoint);
![]()
Listener.Listen(10);
Console.WriteLine("Server Listen Start
..");
Listener.BeginAccept(new AsyncCallback(OnConnectRequest), Listener);
![]()
Console.ReadLine();
}
![]()
public static void OnConnectRequest(IAsyncResult ar)
{
Socket Listener = (Socket)ar.AsyncState;
NewConnection(Listener.EndAccept(ar));
Listener.BeginAccept(new AsyncCallback(OnConnectRequest), Listener);
}
![]()
public static void NewConnection(Socket clientSocket)
{
Console.WriteLine("Client {0},Joined
..", clientSocket.RemoteEndPoint);
![]()
string connectedMsg = "Connected to " + clientSocket.LocalEndPoint + " success \n\r";
byte[] byteMsg = System.Text.Encoding.ASCII.GetBytes(connectedMsg.ToCharArray());
clientSocket.Send(byteMsg, byteMsg.Length, 0);
![]()
SetupRecieveCallback(clientSocket);
}
![]()
//定義服務器端如何接受從客戶端取得數據
public static void SetupRecieveCallback(Socket sock)
{
try
{
AsyncCallback recieveData = new AsyncCallback(OnRecievedData);
sock.BeginReceive(msgBuff, 0, msgBuff.Length, SocketFlags.None, recieveData, sock);
}
catch (Exception ex)
{
Console.WriteLine("Recieve callback setup failed! {0}", ex.Message);
}
}
![]()
![]()
public static void OnRecievedData(IAsyncResult ar)
{
Socket sock = (Socket)ar.AsyncState;
// Check if we got any data
try
{
int nBytesRec = sock.EndReceive(ar);
if (nBytesRec > 0)
{
// Get the received message
string sRecieved = Encoding.ASCII.GetString(msgBuff, 0, nBytesRec);
Console.WriteLine("Receive Data is {0}", sRecieved);
![]()
ProcessMessage(sock, sRecieved.ToUpper());
SetupRecieveCallback(sock);
}
else
{
// If no data was recieved then the connection is probably dead
Console.WriteLine("disconnect from server {0}", sock.RemoteEndPoint);
sock.Shutdown(SocketShutdown.Both);
sock.Close();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message, "Unusual error druing Recieve!");
}
}
![]()
public static void ProcessMessage(Socket sock, string msg)
{
int count = msg.Length;
if (count > 0)
{
Console.WriteLine("Send Data is {0}", msg);
sock.Send(System.Text.Encoding.ASCII.GetBytes(msg.ToCharArray()));
}
}
![]()
}
}
Client代碼:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using System.Net;
using System.Net.Sockets;
![]()
namespace SocketClient
{
class ClientObj
{
private static byte[] msgBuff = new byte[10240];
private static Socket clientSocket;
private ListViewItem m_lvItem;
![]()
private int m_ClientUpdateInterval;
private int m_ClientUpdateMessages;
private string m_message;
private string m_ReturnMsg;
![]()
![]()
public ClientObj(ListViewItem lvItem, int updateInterval, int updateMessages, string strMessage)
{
// m_ClientModelData = model;
m_lvItem = lvItem;
m_ClientUpdateInterval = updateInterval;
m_ClientUpdateMessages = updateMessages;
m_message = strMessage;
}
![]()
public void SendMsg(string sendMsg)
{
Byte[] byteMsg = System.Text.Encoding.ASCII.GetBytes(sendMsg.ToCharArray());
if (clientSocket != null)
{
if (clientSocket.Connected)
{
clientSocket.Send(byteMsg);
}
}
}
![]()
public void Connect()
{
try
{
![]()
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
IPHostEntry myIpHostEntry = Dns.GetHostEntry("sitd-RogerWang");
IPEndPoint epServer = new IPEndPoint(myIpHostEntry.AddressList[0], 8888);
![]()
clientSocket.Blocking = false;
clientSocket.BeginConnect(epServer, new AsyncCallback(OnConnect), clientSocket);
}
catch (Exception e)
{
Console.WriteLine("Connected To Server failed
");
Console.WriteLine(e.Message);
}
}
![]()
public void SetupRecieveCallback(Socket sock)
{
try
{
AsyncCallback recieveData = new AsyncCallback(OnRecievedData);
sock.BeginReceive(msgBuff, 0, msgBuff.Length, SocketFlags.None, recieveData, sock);
}
catch (Exception ex)
{
Console.WriteLine("Recieve callback setup failed! {0}", ex.Message);
}
}
![]()
public void OnConnect(IAsyncResult ar)
{
Socket sock = (Socket)ar.AsyncState;
![]()
try
{
if (sock.Connected)
{
SetupRecieveCallback(sock);
}
else
{
Console.WriteLine("Unable to connect to remote machine", "Connect Failed!");
}
}
catch (Exception e)
{
Console.WriteLine(e.Message, "Unusual error during Connect!");
}
}
![]()
public void OnRecievedData(IAsyncResult ar)
{
Socket sock = (Socket)ar.AsyncState;
// Check if we got any data
try
{
int nBytesRec = sock.EndReceive(ar);
if (nBytesRec > 0)
{
// Get the received message
string sRecieved = Encoding.ASCII.GetString(msgBuff, 0, nBytesRec);
![]()
m_ReturnMsg = sRecieved;
// Process it
//ProcessMessage(sock, sRecieved);
//lbMessage.Items.Add(sRecieved);
SetupRecieveCallback(sock);
}
else
{
// If no data was recieved then the connection is probably dead
Console.WriteLine("disconnect from server {0}", sock.RemoteEndPoint);
sock.Shutdown(SocketShutdown.Both);
sock.Close();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message, "Unusual error druing Recieve!");
}
}
![]()
public void StartSimulate()
{
DateTime dtBegin = DateTime.Now;
DateTime dtEnd = DateTime.Now;
int MessagesCount = 0;
int TimeUsedCount = 0;
int timeUsedHigh = 0;
int timeUsedLow = int.MaxValue;
long iTimeCount = 0;
float fTimeCount = 0;
string strReturnMessage = string.Empty;
![]()
Connect();
![]()
lock (m_lvItem)
{
m_lvItem.SubItems[1].Text = dtBegin.ToString();
}
![]()
while (Program.isRunning)
{
dtBegin = DateTime.Now;
try
{
for (int i = 0; i < m_ClientUpdateMessages; i++)
{
//strReturnMessage = m_RemotingObj.HelloTheWorldEcho(m_message);
}
}
catch (Exception ex)
{
}
![]()
dtEnd = DateTime.Now;
//iTimeCount = iTimeCount + (dtEnd.Ticks - dtBegin.Ticks);
iTimeCount = (dtEnd.Ticks - dtBegin.Ticks);
fTimeCount = iTimeCount / 10000; //等弇岆瑭鏃
![]()
MessagesCount++;
TimeUsedCount += (int)fTimeCount;
if (timeUsedHigh < fTimeCount)
{
timeUsedHigh = (int)fTimeCount;
}
if (timeUsedLow > fTimeCount)
{
timeUsedLow = (int)fTimeCount;
}
![]()
![]()
SendMsg(m_message);
![]()
lock (m_lvItem)
{
try
{
m_lvItem.SubItems[2].Text = dtEnd.ToString(); //郔綴奻換奀潔
m_lvItem.SubItems[3].Text = m_ClientUpdateMessages.ToString(); //奻換杅擂杅
m_lvItem.SubItems[4].Text = fTimeCount.ToString(); //郔綴奻換瑭奀
m_lvItem.SubItems[5].Text = timeUsedHigh.ToString(); //奻換詢瑕
m_lvItem.SubItems[6].Text = timeUsedLow.ToString(); //奻換腴瑕
![]()
m_lvItem.SubItems[7].Text = MessagesCount.ToString(); //奻換杅擂軞杅
m_lvItem.SubItems[8].Text = TimeUsedCount.ToString(); //奻換軞瑭奀
m_lvItem.SubItems[9].Text = m_ReturnMsg; //殿隙秏洘
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
if (fTimeCount < m_ClientUpdateInterval * 1000)
{
Thread.Sleep((int)(m_ClientUpdateInterval * 1000 - fTimeCount));
}
}
}
}
}
using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace SocketSvr
{
class Program
{
private static byte[] msgBuff = new byte[10240];
//private static Socket clientSocket;
const int nListenPort = 8888;

static void Main(string[] args)
{
Socket Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
IPHostEntry myIpHostEntry = Dns.GetHostEntry("sitd-RogerWang");
IPEndPoint myIpEndPoint = new IPEndPoint(myIpHostEntry.AddressList[0],nListenPort);
Listener.Bind(myIpEndPoint);
Listener.Listen(10);
Console.WriteLine("Server Listen Start
..");
Listener.BeginAccept(new AsyncCallback(OnConnectRequest), Listener);
Console.ReadLine();
}
public static void OnConnectRequest(IAsyncResult ar)
{
Socket Listener = (Socket)ar.AsyncState;
NewConnection(Listener.EndAccept(ar));
Listener.BeginAccept(new AsyncCallback(OnConnectRequest), Listener);
}
public static void NewConnection(Socket clientSocket)
{
Console.WriteLine("Client {0},Joined
..", clientSocket.RemoteEndPoint);
string connectedMsg = "Connected to " + clientSocket.LocalEndPoint + " success \n\r";
byte[] byteMsg = System.Text.Encoding.ASCII.GetBytes(connectedMsg.ToCharArray());
clientSocket.Send(byteMsg, byteMsg.Length, 0);
SetupRecieveCallback(clientSocket);
}
//定義服務器端如何接受從客戶端取得數據
public static void SetupRecieveCallback(Socket sock)
{
try
{
AsyncCallback recieveData = new AsyncCallback(OnRecievedData);
sock.BeginReceive(msgBuff, 0, msgBuff.Length, SocketFlags.None, recieveData, sock);
}
catch (Exception ex)
{
Console.WriteLine("Recieve callback setup failed! {0}", ex.Message);
}
}

public static void OnRecievedData(IAsyncResult ar)
{
Socket sock = (Socket)ar.AsyncState;
// Check if we got any data
try
{
int nBytesRec = sock.EndReceive(ar);
if (nBytesRec > 0)
{
// Get the received message
string sRecieved = Encoding.ASCII.GetString(msgBuff, 0, nBytesRec);
Console.WriteLine("Receive Data is {0}", sRecieved);
ProcessMessage(sock, sRecieved.ToUpper());
SetupRecieveCallback(sock);
}
else
{
// If no data was recieved then the connection is probably dead
Console.WriteLine("disconnect from server {0}", sock.RemoteEndPoint);
sock.Shutdown(SocketShutdown.Both);
sock.Close();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message, "Unusual error druing Recieve!");
}
}
public static void ProcessMessage(Socket sock, string msg)
{
int count = msg.Length;
if (count > 0)
{
Console.WriteLine("Send Data is {0}", msg);
sock.Send(System.Text.Encoding.ASCII.GetBytes(msg.ToCharArray()));
}
}
}
}
Client代碼:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using System.Net;
using System.Net.Sockets;
namespace SocketClient
{
class ClientObj
{
private static byte[] msgBuff = new byte[10240];
private static Socket clientSocket;
private ListViewItem m_lvItem;
private int m_ClientUpdateInterval;
private int m_ClientUpdateMessages;
private string m_message;
private string m_ReturnMsg;

public ClientObj(ListViewItem lvItem, int updateInterval, int updateMessages, string strMessage)
{
// m_ClientModelData = model;
m_lvItem = lvItem;
m_ClientUpdateInterval = updateInterval;
m_ClientUpdateMessages = updateMessages;
m_message = strMessage;
}
public void SendMsg(string sendMsg)
{
Byte[] byteMsg = System.Text.Encoding.ASCII.GetBytes(sendMsg.ToCharArray());
if (clientSocket != null)
{
if (clientSocket.Connected)
{
clientSocket.Send(byteMsg);
}
}
}
public void Connect()
{
try
{
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
IPHostEntry myIpHostEntry = Dns.GetHostEntry("sitd-RogerWang");
IPEndPoint epServer = new IPEndPoint(myIpHostEntry.AddressList[0], 8888);
clientSocket.Blocking = false;
clientSocket.BeginConnect(epServer, new AsyncCallback(OnConnect), clientSocket);
}
catch (Exception e)
{
Console.WriteLine("Connected To Server failed
");
Console.WriteLine(e.Message);
}
}
public void SetupRecieveCallback(Socket sock)
{
try
{
AsyncCallback recieveData = new AsyncCallback(OnRecievedData);
sock.BeginReceive(msgBuff, 0, msgBuff.Length, SocketFlags.None, recieveData, sock);
}
catch (Exception ex)
{
Console.WriteLine("Recieve callback setup failed! {0}", ex.Message);
}
}
public void OnConnect(IAsyncResult ar)
{
Socket sock = (Socket)ar.AsyncState;
try
{
if (sock.Connected)
{
SetupRecieveCallback(sock);
}
else
{
Console.WriteLine("Unable to connect to remote machine", "Connect Failed!");
}
}
catch (Exception e)
{
Console.WriteLine(e.Message, "Unusual error during Connect!");
}
}
public void OnRecievedData(IAsyncResult ar)
{
Socket sock = (Socket)ar.AsyncState;
// Check if we got any data
try
{
int nBytesRec = sock.EndReceive(ar);
if (nBytesRec > 0)
{
// Get the received message
string sRecieved = Encoding.ASCII.GetString(msgBuff, 0, nBytesRec);
m_ReturnMsg = sRecieved;
// Process it
//ProcessMessage(sock, sRecieved);
//lbMessage.Items.Add(sRecieved);
SetupRecieveCallback(sock);
}
else
{
// If no data was recieved then the connection is probably dead
Console.WriteLine("disconnect from server {0}", sock.RemoteEndPoint);
sock.Shutdown(SocketShutdown.Both);
sock.Close();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message, "Unusual error druing Recieve!");
}
}
public void StartSimulate()
{
DateTime dtBegin = DateTime.Now;
DateTime dtEnd = DateTime.Now;
int MessagesCount = 0;
int TimeUsedCount = 0;
int timeUsedHigh = 0;
int timeUsedLow = int.MaxValue;
long iTimeCount = 0;
float fTimeCount = 0;
string strReturnMessage = string.Empty;
Connect();
lock (m_lvItem)
{
m_lvItem.SubItems[1].Text = dtBegin.ToString();
}
while (Program.isRunning)
{
dtBegin = DateTime.Now;
try
{
for (int i = 0; i < m_ClientUpdateMessages; i++)
{
//strReturnMessage = m_RemotingObj.HelloTheWorldEcho(m_message);
}
}
catch (Exception ex)
{
}
dtEnd = DateTime.Now;
//iTimeCount = iTimeCount + (dtEnd.Ticks - dtBegin.Ticks);
iTimeCount = (dtEnd.Ticks - dtBegin.Ticks);
fTimeCount = iTimeCount / 10000; //等弇岆瑭鏃
MessagesCount++;
TimeUsedCount += (int)fTimeCount;
if (timeUsedHigh < fTimeCount)
{
timeUsedHigh = (int)fTimeCount;
}
if (timeUsedLow > fTimeCount)
{
timeUsedLow = (int)fTimeCount;
}

SendMsg(m_message);
lock (m_lvItem)
{
try
{
m_lvItem.SubItems[2].Text = dtEnd.ToString(); //郔綴奻換奀潔
m_lvItem.SubItems[3].Text = m_ClientUpdateMessages.ToString(); //奻換杅擂杅
m_lvItem.SubItems[4].Text = fTimeCount.ToString(); //郔綴奻換瑭奀
m_lvItem.SubItems[5].Text = timeUsedHigh.ToString(); //奻換詢瑕
m_lvItem.SubItems[6].Text = timeUsedLow.ToString(); //奻換腴瑕
m_lvItem.SubItems[7].Text = MessagesCount.ToString(); //奻換杅擂軞杅
m_lvItem.SubItems[8].Text = TimeUsedCount.ToString(); //奻換軞瑭奀
m_lvItem.SubItems[9].Text = m_ReturnMsg; //殿隙秏洘
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
if (fTimeCount < m_ClientUpdateInterval * 1000)
{
Thread.Sleep((int)(m_ClientUpdateInterval * 1000 - fTimeCount));
}
}
}
}
}

浙公网安备 33010602011771号