111,125
社区成员
发帖
与我相关
我的任务
分享
namespace UdpTcpServer
{
public partial class UdpTcpServerForm : Form
{
struct ClientInfo
{
public EndPoint endpoint;
public string strName;
}
ArrayList clientList;
Socket serverSocket;
byte[] byteData = new byte[1024];
public UdpTcpServerForm()
{
CheckForIllegalCrossThreadCalls = false;
clientList = new ArrayList();
InitializeComponent();
}
private void UdpTcpServerForm_Load(object sender, EventArgs e)
{
try
{
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("192.168.1.114"), 8080);
serverSocket.Bind(ipEndPoint);
IPEndPoint ipeSender = new IPEndPoint(IPAddress.Any, 0);
EndPoint epSender = (EndPoint)ipeSender;
byteData = new byte[1024];
serverSocket.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None, ref epSender, new AsyncCallback(OnReceive), epSender);
if (lbUsers.Items.Count <= 0)
{
btnSendMessage.Enabled = false;
btnBrocast.Enabled = false;
btnSendFile.Enabled = false;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "UdpTcpServer", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public void OnSend(IAsyncResult ar)
{
try
{
serverSocket.EndSend(ar);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "UdpTcpServer", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void OnReceive(IAsyncResult ar)
{
try
{
IPEndPoint ipeSender = new IPEndPoint(IPAddress.Any, 0);
EndPoint epSender = (EndPoint)ipeSender;
//Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
serverSocket.EndReceiveFrom(ar, ref epSender);
string msgReceived = Encoding.Unicode.GetString(byteData);
string[] tokens = msgReceived.Split(new char[] { '|' });
if (tokens[0] == "login")
{
ClientInfo clientInfo = new ClientInfo();
clientInfo.endpoint = epSender;
clientInfo.strName = tokens[1];
clientList.Add(clientInfo);
lbUsers.Items.Add(tokens[1]);
btnBrocast.Enabled = true;
btnSendFile.Enabled = true;
btnSendMessage.Enabled = true;
}
else if (tokens[0] == "logout")
{
int nIndex = 0;
foreach (ClientInfo client in clientList)
{
string strEndPoint = client.endpoint.ToString();
string strepSender = epSender.ToString();
if (strEndPoint.Equals(strepSender))
{
clientList.RemoveAt(nIndex);
lbUsers.Items.RemoveAt(nIndex);
break;
}
++nIndex;
}
string strMessage = tokens[1];
rtbHistoryMessage.AppendText(strMessage);
}
else if (tokens[0] == "talk")
{
rtbHistoryMessage.AppendText(tokens[1]);
string message = "talk|"+tokens[1];
byteData = Encoding.Unicode.GetBytes(message);
serverSocket.BeginSendTo(byteData, 0, byteData.Length, SocketFlags.None, epSender, new AsyncCallback(OnSend), epSender);
}
byteData=new byte[1024];
serverSocket.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None, ref epSender, new AsyncCallback(OnReceive), epSender);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "UdpTcpServer", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void btnSendMessage_Click(object sender, EventArgs e)
{
if (lbUsers.SelectedItems.Count > 0)
{
if (txtMessage.Text.Length > 0)
{
string sendMessage = "talk|" + "服务器:" + txtMessage.Text + "\n";
byteData = Encoding.Unicode.GetBytes(sendMessage);
foreach (string user in lbUsers.SelectedItems)
{
foreach (ClientInfo client in clientList)
{
if (client.strName.ToString().Trim()==user.Trim())
{
serverSocket.BeginSendTo(byteData, 0, byteData.Length, SocketFlags.None, client.endpoint, new AsyncCallback(OnSend), client.endpoint);
}
}
}
rtbHistoryMessage.AppendText("服务器:" + txtMessage.Text + Environment.NewLine);
txtMessage.Text = null;
}
else
{
MessageBox.Show("不能发送空信息!");
}
}
else
{
MessageBox.Show("请选择用户,再发送!");
}
}
private void btnBrocast_Click(object sender, EventArgs e)
{
string sendMessage = "talk|" + "服务器:" + txtMessage.Text + "\n" ;
byteData = Encoding.Unicode.GetBytes(sendMessage);
foreach (ClientInfo ci in clientList)
{
EndPoint epSender = ci.endpoint;
serverSocket.BeginSendTo(byteData, 0, byteData.Length, SocketFlags.None, epSender, new AsyncCallback(OnSend), epSender);
}
rtbHistoryMessage.AppendText("服务器:" + txtMessage.Text + Environment.NewLine);
txtMessage.Text = null;
sendMessage = null;
}
}
}
namespace UdpTcpClient
{
public partial class Form1 : Form
{
public Socket clientSocket;
public string strName;
public EndPoint epServer;
byte[] byteData = new byte[1024];
int portNo = 8080;
private string filename;
private string fullfilename;
public Form1()
{
CheckForIllegalCrossThreadCalls = false;
InitializeComponent();
btnSendFile.Enabled = false;
btnSendMessage.Enabled = false;
}
private void OnSend(IAsyncResult ar)
{
try
{
clientSocket.EndSend(ar);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "UdpTcpClient: " + strName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void OnReceive(IAsyncResult ar)
{
try
{
clientSocket.EndReceive(ar);
string msgReceived =Encoding.Unicode.GetString(byteData);
string[] tokens = msgReceived.Split(new Char[] { '|' });
if (tokens[0] == "talk"&&tokens[1].Length>0)
{
rtbHistoryMessage.AppendText(tokens[1]);
}
byteData = new byte[1024];
clientSocket.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None, ref epServer, new AsyncCallback(OnReceive), null);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "UdpTcpClient: " + strName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void btnSign_Click(object sender, EventArgs e)
{
if (btnSign.Text == "登陆")
{
strName = txtNick.Text.Trim();
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPAddress ip = IPAddress.Parse("192.168.1.114");
IPEndPoint ipep = new IPEndPoint(ip, portNo);
epServer = (EndPoint)ipep;
string sendMessage =string.Empty;
sendMessage = "login|" + strName + "\n";
byteData = Encoding.Unicode.GetBytes(sendMessage);
clientSocket.BeginSendTo(byteData, 0, byteData.Length, SocketFlags.None, epServer, new AsyncCallback(OnSend), null);
this.Text = "客户端用户:" + strName;
Initialize();
txtNick.Enabled = false;
btnSign.Enabled = false;
btnSendFile.Enabled = true;
}
}
private void Initialize()
{
byteData = new byte[1024];
clientSocket.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None, ref epServer, new AsyncCallback(OnReceive), null);
}
private void btnSendMessage_Click(object sender, EventArgs e)
{
try
{
string sendMessage = "talk|" + txtNick.Text + ":" + txtMessage.Text + "\n";
byteData = Encoding.Unicode.GetBytes(sendMessage);
clientSocket.BeginSendTo(byteData, 0, byteData.Length, SocketFlags.None, epServer, new AsyncCallback(OnSend), null);
txtMessage.Text = null;
btnSendMessage.Enabled = false;
}
catch (Exception)
{
MessageBox.Show("无法向服务器发送消息!", "UdpTcpClient: " + strName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
public String ReadTime(int DeviceStyle, String MACAddress, String IPAddress, int Port, int PCPort, String SysNo, int ReadTimeTime)
{
Functions Funcs = new Functions();
IPEndPoint RemoteIPEndPoint = new IPEndPoint(System.Net.IPAddress.Parse(IPAddress), Port);
using (UdpClient UC = new UdpClient(PCPort))
{
String SendInfo = "AA" + MACAddress + DeviceStyle.ToString() + SysNo + "02000000";
SendInfo += Funcs.CreateCheck(SendInfo);
UC.Connect(RemoteIPEndPoint);
Byte[] SendBytes = Encoding.ASCII.GetBytes(SendInfo);
UC.Send(SendBytes, SendBytes.Length);
IAsyncResult AR = UC.BeginReceive(null, null);
AR.AsyncWaitHandle.WaitOne(ReadTimeTime * 1000);
if (AR.IsCompleted)
{
Byte[] ReceiveBytes = UC.EndReceive(AR, ref RemoteIPEndPoint);
String ReceiveInfo = Encoding.ASCII.GetString(ReceiveBytes);
Consts.CommandInfo CI = new Consts.CommandInfo(ReceiveInfo);
Funcs.CheckCMDStatus(CI.CMDStatus);
if (CI.CMDType == Consts.ECMDType.ctDev)
if (CI.CMDCode == 0x02)
return "读取成功,消费机MAC地址[" + CI.DevMac + "]的返回的当前时间是 " + DateTime.FromOADate(Funcs.DevStrToDateTime(CI.CMDData)).ToString();
else
throw new Exception("操作失败。");
}
else
{
throw new Exception("操作超时。");
}
return String.Empty;
}
}