c# 求符合要求的 TCP 、多线程、服务器 <> 客户端 通信代码

协议类型:TCP线程要求:多线程(服务器>多客户端)服务器上的控件:客户端列表(listbox),接收信息框(textbox),发送信息框(textbox),发送按钮(b... 协议类型:TCP
线程要求:多线程(服务器 > 多客户端)

服务器上的控件:客户端列表(listbox),接收信息框(textbox),发送信息框(textbox),发送按钮(buttn),连接信息(listbox),IP(textbox),端口(textbox),启动服务按钮(buttn),停止服务按钮(buttn)

客户端控件:IP(textbox),端口(textbox),连接按钮(buttn),接收信息框(textbox),发送信息框(textbox),发送按钮(buttn)

其他:
支持多客户端,所有客户端将信息发送给服务器中转后发送给其他客户端。
客户端连接服务端,如果服务器未开启,则提示,服务器已关闭
服务器关闭后,反馈所有客户端一条提示:服务器已关闭

基本上就这样了,因为BD悬赏分有限额,所以得到答案后,会追加到最高悬赏!!
有能之士快来啊~~~~
展开
 我来答
poweroo7
2010-11-29
知道答主
回答量:32
采纳率:0%
帮助的人:16.8万
展开全部

这个我正好做过,把代码给出粘过来吧,记得把分给我.  (后边有图片的)

服务器端程序:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading;

using System.Net;

using System.Net.Sockets;

using System.Windows.Forms;

namespace WindowsFormsApplication2

{

    public partial class Form1 : Form

    {

        private static TcpListener listener;

        private static Socket clientsocket;

        private static IPEndPoint listenPort;

        private static Thread clientservice;        

        delegate void setTextSring(string str);

        public Form1()

        {

            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)

        {

            string port = textBox1.Text;            

            if (port == "")

            {

                MessageBox.Show("请输入监听端口");

                return;

            }

            try

            {

                if (Int32.Parse(port) > 0)

                {                    

                    listenPort = new IPEndPoint(IPAddress.Any, Int32.Parse(port));

                    Thread thr = new Thread(new ThreadStart(StartListening));

                    thr.Start();

                }

                else

                    MessageBox.Show("监听端口号必须大于0,建议使用大于1024的端口");

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }

        private void StartListening()

        {

            listener = new TcpListener(listenPort);

            SetText("IP: " + Convert.ToString(listenPort) + "\r\n");

            listener.Start();

            MessageBox.Show("服务已启动。。。");

            while (true)

            {

                try

                {

                    Socket s = listener.AcceptSocket();

                    clientsocket = s;

                    clientservice = new Thread(new ThreadStart(ServiceClient));

                    clientservice.Start();

                }

                catch (Exception e)

                {

                    MessageBox.Show(e.ToString());

                }

            }

        }

        private void SetText(string str)

        {

            if (textBox2.InvokeRequired)

            {

                setTextSring sts = new setTextSring(SetText);

                Invoke(sts, new object[] { str });

            }

            else

            {

                this.textBox2.Text += str;

            }

        }

        public static string byteToHexStr(byte[] bytes)

        {

            string returnStr = "";

            if (bytes != null)

            {

                for (int i = 0; i < bytes.Length; i++)

                {

                    returnStr += bytes[i].ToString("X2") + " ";

                }

            }

            return returnStr;

        }

        private void ServiceClient()

        {

            Socket client = clientsocket;

            bool keepalive = true;

            while (keepalive)

            {

                byte[] buffer = new Byte[60];

                client.Receive(buffer);                

                string clientcommand = byteToHexStr(buffer);

                clientcommand += "\r\n";                

                SetText(clientcommand);

            }

        }

        private static void SendToClient(Socket cli, string str)

        {

            Byte[] sendbytes = System.Text.Encoding.UTF8.GetBytes(str.ToCharArray());

            cli.Send(sendbytes);

        }

   }

}

客户端程序:

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;

using System.Net.Sockets;

using System.Threading;

using System.IO;

namespace WindowsFormsApplication3

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private TcpClient clientsocket;

        private NetworkStream ns;

        private StreamReader sr;

        private bool bConn = false;

        private string clientname = "";

        private Thread t;

        private void button2_Click(object sender, EventArgs e)

        {

            string ip = textBox1.Text;

            int port = Int32.Parse(textBox2.Text);

            if (port > 0)

            {

                if (!EstablishConnection(ip, port))

                    return;

            }

            else

            {

                MessageBox.Show("duankouhaodayu0");

                return;

            }

            t = new Thread(new ThreadStart(recivechat));

            t.Start();

            MessageBox.Show("连接成功!");

        }

        private bool EstablishConnection(string IP, int port)

        {

            try

            {

                clientsocket = new TcpClient(IP, port);

                ns = clientsocket.GetStream();

                sr = new StreamReader(ns);

                bConn = true;

                return true;

            }

            catch (Exception e) 

            {

               MessageBox.Show(e.ToString());               

            }

            return false;

        }

        private void recivechat()

        {

            bool keeplive = true;

            while (keeplive)

            {

                try

                {

                    Byte[] buffer = new Byte[2048];

                    ns.Read(buffer, 0, buffer.Length);

                    string chatter = System.Text.Encoding.UTF8.GetString(buffer);

                    textBox4.Text += chatter;

                }

                catch (Exception e)

                {

                    MessageBox.Show(e.ToString());

                }

            }

        }

        private void button1_Click(object sender, EventArgs e)

        {

            string msg = textBox3.Text;

            Byte[] outbytes = System.Text.Encoding.UTF8.GetBytes(msg.ToCharArray());

            ns.Write(outbytes, 0, outbytes.Length);

            MessageBox.Show("发送成功!");

        }

    }

我把程序的界面图片给你,你参考下

wlfd1234
2010-11-28 · TA获得超过1075个赞
知道小有建树答主
回答量:618
采纳率:0%
帮助的人:506万
展开全部
有现成的类似QQ的源代码
一个服务器,多个客户端可以连接,要就hi我,我一直在线
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yinzuo1988
2010-11-29 · TA获得超过116个赞
知道答主
回答量:72
采纳率:0%
帮助的人:64.8万
展开全部
我有一个类似的案例,你的邮箱

我的邮箱是 yinzuo1988@163.com

晚上发给你,在宿舍里。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式