C# TCP 服务端(PC)与客户端(PPC) 简单代码

来源:互联网 发布:淘宝好评能不能删除 编辑:程序博客网 时间:2024/05/09 00:51

服务器端代码

控件:btnStart_Click,btnSend_Click,label4,textBox1

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Threading;
using System.Net.Sockets;
using System.Net;

namespace MobileServer
{
    public partial class FrmEasy : Form
    {
        //变量
        private ThreadStart start;
        private Thread listenThread,client_th;
        static private bool m_bListening = false;
        //static private System.Net.IPAddress MyIP = System.Net.IPAddress.Parse("192.168.1.3");

        //获得当前服务端的IP    地址
        static private System.Net.IPAddress MyIP = Dns.Resolve(Dns.GetHostName()).AddressList[0];

        static private TcpListener listener = new TcpListener(MyIP, 5567);
        private String msg;
        ArrayList clientArray = new ArrayList();

        public FrmEasy()
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;
            start = new ThreadStart(startListen);
            listenThread = new Thread(start);
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            if (m_bListening)
            {
                m_bListening = false;
                label4.Text = "Server Idle...";
            }
            else
            {
                m_bListening = true;
                listenThread.Start();
                label4.Text = "Server Listening...";
            }
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            object a = clientArray[0];
            TcpClient client = (TcpClient)clientArray[0];
            if (client == null)
                return;
            NetworkStream sendStream = client.GetStream();
            String msg = textBox1.Text;
            Byte[] sendBytes = Encoding.Default.GetBytes(msg);
            sendStream.Write(sendBytes, 0, sendBytes.Length);
            sendStream.Flush();
            //sendStream.Close();
        }

        private void showmore()
        {
            textBox1.Text = msg;
        }
        private void startListen()
        {
            //textBox1.Text = "listening...";
            listener.Start();
            //接收数据
            while (m_bListening)
            {
                //测试是否有数据
                try
                {
                    TcpClient client = listener.AcceptTcpClient();
                    clientArray.Add(client);
                    ParameterizedThreadStart threadStart = new ParameterizedThreadStart(AcceptMsg);                   
                    client_th = new Thread(threadStart);
                    client_th.Start(client);
                }
                catch (Exception re)
                {
                    MessageBox.Show(re.Message);
                }
            }
            listener.Stop();
        }
        private void AcceptMsg(object arg)
        {
            TcpClient client = (TcpClient)arg;
            NetworkStream ns = client.GetStream();
            //StreamReader sr = new StreamReader(ns);//流读写器
            //字组处理
            while (true)
            {
                try
                {
                    byte[] bytes = new byte[1024];
                    int bytesread = ns.Read(bytes, 0, bytes.Length);
                    msg = Encoding.Default.GetString(bytes, 0, bytesread);
                    //显示
                    //MessageBox.Show(msg);
                    showmore();

                    //将收到的数据回传给客户端,实际中,应该经过解析,将相应的数据回传给客户端。
                    NetworkStream sendStream = client.GetStream();
                    String msga = textBox1.Text;
                    Byte[] sendBytes = Encoding.Default.GetBytes(msga);
                    sendStream.Write(sendBytes, 0, sendBytes.Length);
                    sendStream.Flush();
                    ns.Flush();
                    //ns.Close();
                }
                catch(Exception ex)
                {
                    //MessageBox.Show("与客户端断开连接了");
                    MessageBox.Show(ex.Message);
                    break;
                }
            }
        }
    }
}

 

客户端代码:

控件:button1_Click,btnSend_Click,textBox2

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Threading;

namespace TCP_PPCClient
{
    public partial class Form3 : Form
    {
        private TcpClient client;
        private Thread client_th;
        public Form3()
        {
            InitializeComponent();

            //此句在WinForm中可以,但在智能设备上不可用
            //Control.CheckForIllegalCrossThreadCalls = false;
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            if (client == null)
                return;
            NetworkStream sendStream = client.GetStream();
            String msg = textBox1.Text;
            Byte[] sendBytes = Encoding.Default.GetBytes(msg);
            sendStream.Write(sendBytes, 0, sendBytes.Length);
            sendStream.Flush();
            //sendStream.Close();
            textBox1.Text = "Msg Sent!";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            String mystr = textBox1.Text;
            string ip = "192.168.1.3";  //连接服务器端的IP地址
            this.connect_s(ip);
        }

        public void connect_s(string ip)
        {
            try
            {
                client = new TcpClient(ip, 5567);
                ThreadStart threadStart = new ThreadStart(AcceptMsg);
                client_th = new Thread(threadStart);
                client_th.Start();
                textBox2.Text="连接成功";
            }
            catch(System.Exception e)
            {
                textBox2.Text = e.ToString(); ;
            }
        }
        private void AcceptMsg()
        {
            NetworkStream ns = client.GetStream();
            //StreamReader sr = new StreamReader(ns);//流读写器
            //字组处理
            while (true)
            {
                try
                {
                    byte[] bytes = new byte[1024];
                    int bytesread = ns.Read(bytes, 0, bytes.Length);
                    string msg = Encoding.Default.GetString(bytes, 0, bytesread);                   
                    //显示
                    MessageBox.Show(msg);
                    ns.Flush();//刷新流中的数据
                    //ns.Close();
                }
                catch(Exception ex)
                {
                    //MessageBox.Show ("与服务器断开连接了");
                    MessageBox.Show(ex.Message);
                    break;
                }
            }
        }
    }
}

原创粉丝点击