using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
namespace SocketClient
{
public partial class frmSocketClient : Form
{
public frmSocketClient()
{
InitializeComponent();
}
Socket socketSend;
private void btnClick_Click(object sender, EventArgs e)
{
try
{
//创建客户端Socket,获得远程ip和端口号
socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(txtIP.Text);
IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtport.Text));
socketSend.Connect(point);
ShowMsg("连接成功!");
//开启新的线程,不停的接收服务器发来的消息
Thread c_thread = new Thread(Received);
c_thread.IsBackground = true;
c_thread.Start();
}
catch (Exception)
{
ShowMsg("IP或者端口号错误...");
}
}
void ShowMsg(string str)
{
textConnect.AppendText(str + "\r\n");
}
/// <summary>
/// 接收服务端返回的消息
/// </summary>
void Received()
{
while (true)
{
try
{
byte[] buffer = new byte[1024 * 1024 * 3];
//实际接收到的有效字节数
int len = socketSend.Receive(buffer);
if (len == 0)
{
break;
}
string str =Encoding.UTF8.GetString(buffer, 0, len);
ShowMsg(socketSend.RemoteEndPoint + ":" + str);
}
catch { }
}
}
/// <summary>
/// 向服务器发送消息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSend_Click(object sender, EventArgs e)
{
try
{
try
{
string msg = textBox2.Text;
//string data = ChangeLan(msg);//把输入的字符串转换成二进制
//string len = ((msg.Length) * 2).ToString();//长度
//StringBuilder sb = new StringBuilder();
//sb.Append("FF FF FF FF FF FF 00 00 00 00 ");
//sb.Append(" 78 34 01 00 ");
//sb.Append(" 29");
//sb.Append(" 12 F2 00 00 00 00 00 00 ");
//sb.Append(len+" 00");//len
//sb.Append(" 01 02 00 03 10 00 "+data);//data
//sb.Append(" 1E D7");//check
//sb.Append(" A5");
byte[] buffer = HexStringToByteArray(msg.ToString());//把二进制转换成16进制进行发送
socketSend.Send(buffer);
}
catch { }
}
catch { }
}
//把二进制转换成16进制发送通讯
public static byte[] HexStringToByteArray(string s)
{
s = s.Replace(" ", "");
byte[] buffer = new byte[s.Length / 2];
for (int i = 0; i < s.Length; i += 2)
buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
return buffer;
}
//UTF-8转化为GB2312
public static string ChangeLan(string text){
byte[] bytes = System.Text.Encoding.GetEncoding("gb2312").GetBytes(text);
string s = "";
for (int i = 0; i < bytes.Length - 1; i++)
{
string s1 = string.Format("{0:x2}", bytes[i].ToString("X2").PadLeft(4, '0'));
s = s + s1 ;
}
//字符串切割,每俩个数字中间加个空格
string result = Regex.Replace(s, @".{2}", "$0 ");
return result;
}
private void frmSocketClient_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
}
}
}