110,537
社区成员
发帖
与我相关
我的任务
分享
private void button2_Click(object sender, EventArgs e)//发送消息
{
IPEndPoint ipp = (IPEndPoint)serverSocket.RemoteEndPoint;
string IP=ipp.Address.ToString();//这样可以获取保存的SOCKET的IP和端口啊
string PORT = ipp.Port.ToString();//为什么呢?
MyClient.send_msg(serverSocket, MyClient.TCP_msg + textBox6.Text);//这里是单独发送消息 但是发送不过去?
}
namespace Client
{
public partial class Form1 : Form
{
CClient MyClient = new Client.CClient();
public Socket serverSocket;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MyClient.StartThread(textBox1.Text,Convert.ToInt32(textBox2.Text));//开启连接
}
private void Form1_Load(object sender, EventArgs e)
{
CheckForIllegalCrossThreadCalls = false;
MyClient.showMsg += showMsg;//显示消息委托代理
MyClient.showClientMsg += showClientMsg;//显示连接状态
}
public void showMsg(string s)
{
textBox3.AppendText( "\r\n"+ s );
}
public void showClientMsg(string s)
{
label1.Text = "连接状态:" + s;
}
private void button2_Click(object sender, EventArgs e)//发送消息
{
MyClient.send_msg(serverSocket, MyClient.TCP_msg + textBox6.Text);//这里是单独发送消息 但是发送不过去?
}
}
}
新类
namespace Client
{
class CClient
{
Thread Client_thread;
public delegate void listenMessage(string msg);//委托显示消息
public listenMessage showMsg,showClientMsg;
public string serverIP;//服务器IP
public int serverPort;//服务器端口
public int TCP_LengTh = 6;//协议长度
public string TCP_client = "TCP-01";//连接协议
public string TCP_client_OK = "TCP-02";
public string TCP_msg = "TCP-03";//消息协议
public string TCP_close = "TCP-04";//关闭连接协议
public void BeginSend()
{
Form1 fm1 = System.Windows.Forms.Application.OpenForms[0] as Form1;//访问和修改主窗体控件属性
IPEndPoint iep = new IPEndPoint(IPAddress.Parse(serverIP), serverPort);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(iep);
byte[] byClent = new byte[1024];
byClent = Encoding.Default.GetBytes(TCP_client);//发送消息
socket.Send(byClent);
fm1.serverSocket = socket;//保存创建后的socket
beginListen(socket); //开始监听
}
public void beginListen(Socket s)//接收数据
{
Form1 fm1 = System.Windows.Forms.Application.OpenForms[0] as Form1;//访问和修改主窗体控件属性
while (true)
{
byte[] recMsg = new byte[1024];
int rec = s.Receive(recMsg);
if (rec > 0)
{
string recS=Encoding.Default.GetString(recMsg);//接收的消息
string recSub = recS.Substring(0,TCP_LengTh);//截取协议头部消息
if (recSub == TCP_client_OK)
{
showClientMsg("服务器连接成功!");//委托显示状态
fm1.serverSocket = s;//全局保存连接后的SOCKET
}
if (recSub == TCP_msg)
{
showMsg(recS.Remove(0,TCP_LengTh));//委托显示消息
}
}
}
}
public void send_msg( Socket s, string msg)//发送消息
{
byte[] bf = new byte[1024];
bf = Encoding.Default.GetBytes(msg);
s.Send(bf);
}
public void StartThread(string serIP,int serPort)//开启线程
{
serverIP = serIP; //赋值IP和端口
serverPort = serPort;
Client_thread = new Thread(new ThreadStart(BeginSend));
Client_thread.Start();
}
}
}