python建立一个简单的客户端 C#建立一个简单的服务器

一、客户端构建

import socket

BUFSIZE = 2048
IPADDR = '192.168.8.10'
PORT = 7000
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 创建Socket的客户端
client.connect((IPADDR, PORT))

message = "hello"  
client.send(message.encode('utf-8'))  # 发送
recv_data = client.recv(BUFSIZE).decode('gbk')  

if recv_data== '1':
    message = "0"  
    client.send(message.encode('utf-8'))  
    recv_data= client.recv(BUFSIZE).decode('gbk')  
    data = recv_data.split(',')
    if data[0] == '1':  
        message = "OK"  
        client.send(message.encode('utf-8')) 
    elif data[0] == '0':   
        message = "NG"  
        client.send(message.encode('utf-8'))   

client.close()  # 结束后关闭

二、服务器构建

private void btnConnect_Click(object sender, EventArgs e)
{
    try
    {
         //创建一个负责监听的Socket
         Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
         //创建ip地址和端口号
         IpAndPort ipHePort = new IpAndPort();
         ipHePort.Ip = txtB_IP.Text;//服务器IP
         ipHePort.Port = txtB_port.Text;//为程序设置端口

         //让负责监听的socket绑定ip地址和端口号
         //socketWatch.Bind(point);

         ShowMsg("监听成功");
         //设置监听队列(某一时刻连接客户端的最大数目)
         socketWatch.Listen(10);

         //线程执行的方法
         Thread th = new Thread(reciveAndListener);   //服务器开始监听
         th.IsBackground = true;
         th.Start((object)ipHePort);
    }
    catch
    {

    }
}

void ShowMsg(string str)
{
    txtRecvMssg.AppendText(str + "\r\n");
}
public delegate void showData(string msg);//委托,防止跨线程的访问控件,引起的安全异常
private const int bufferSize = 8000;//缓存空间
private TcpClient client;
private TcpListener server;
/// <summary>
/// 结构体:Ip、端口
/// </summary>
struct IpAndPort
{
     public string Ip;
     public string Port;
}

/// <summary>
/// 侦听客户端的连接并接收客户端发送的信息
/// </summary>
/// <param name="ipAndPort">服务端Ip、侦听端口</param>
private void reciveAndListener(object ipAndPort)
{
    IpAndPort ipHePort = (IpAndPort)ipAndPort;

    IPAddress ip = IPAddress.Parse(ipHePort.Ip);
    server = new TcpListener(ip, int.Parse(ipHePort.Port));
    server.Start();//启动监听
    txtRecvMssg.Invoke(new showData(txtRecvMssg.AppendText), "服务端开启侦听....\n");
    //  btnStart.IsEnabled = false;

    //获取连接的客户端对象
    client = server.AcceptTcpClient();
    txtRecvMssg.Invoke(new showData(txtRecvMssg.AppendText), "有客户端请求连接,连接已建立!");//AcceptTcpClient 是同步方法,会阻塞进程,得到连接对象后才会执行这一步  

    //获得流
    NetworkStream reciveStream = client.GetStream();

    #region 循环监听客户端发来的信息

    do
    {
        byte[] buffer = new byte[bufferSize];
        int msgSize;
        try
        {
            lock (reciveStream)
            {
                msgSize = reciveStream.Read(buffer, 0, bufferSize);
            }
            if (msgSize == 0)
                return;
            string msg = Encoding.Default.GetString(buffer, 0, bufferSize);
            ShowMsg(msg);
            //txtRecvMssg.text = msg;//接收到的信息放到textBox里

            //rtbtxtShowData.Invoke(new showData(rtbtxtShowData.AppendText), "\n客户端曰:" + result + "\r\n");
        }
        catch (Exception ex)
        {
            server.Stop();
            string aa = ex.Message;
            MessageBox.Show(aa);
            txtRecvMssg.Invoke(new showData(txtRecvMssg.AppendText), "\n 出现异常:连接被迫关闭");
            break;
         }
    } while (true);

    #endregion
}

/// <summary>
/// 服务器给客户端发送消息
/// </summary>
private void btnSend_Click(object sender, EventArgs e)
{
     string str = txtSendMssg.Text;
     byte[] buffer = System.Text.Encoding.UTF8.GetBytes(str);
     socketSend.Send(buffer);
}

猜你喜欢

转载自blog.csdn.net/weixin_43737866/article/details/132499750