Scoket 简单聊天室 服务器+客户端

来源:互联网 发布:少女时时彩计划软件 编辑:程序博客网 时间:2024/05/16 14:24

服务器端

using System;using System.Collections.Generic;using System.Text;using System.Net;using System.Net.Sockets;using System.Threading;namespace Chat_Server{    class Server    {        //用于存储已连接的客户端,便于管理        private static List<Client> clientList = new List<Client>();        //服务器收到消息广播给所有在线客户端        public static void BroadMessage(string message)        {            //存储已断开连接的客户端            List<Client> notConnectedClient = new List<Client>();            foreach (var item in clientList)            {                if (item.connencted)                    item.SendMes(message);                else                    notConnectedClient.Add(item);            }            //删除已断开的客户端            foreach (var item in notConnectedClient)            {                clientList.Remove(item);                Console.WriteLine(item + " disConnected!!");            }        }        static void Main(string[] args)        {            Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            IPAddress ipAddress = IPAddress.Parse("127.0.0.1");            EndPoint point = new IPEndPoint(ipAddress, 7788);            tcpServer.Bind(point);            tcpServer.Listen(100);            Console.WriteLine("Server Running..");            while (true)            {                Socket clientSocket = tcpServer.Accept();                Console.WriteLine("One Client Connected!!");                Client client = new Client(clientSocket);                clientList.Add(client);            }        }    }    class Client    {        private Socket clientSocket;        private Thread t;        private byte[] data = new byte[1024];        //构造函数        public Client(Socket socket)        {            clientSocket = socket;            SendMes("Welcome to our ChatRoom!!");            //启用新线程            t = new Thread(ReceiveMes);            t.Start();        }        //向客户端发送新消息        public void SendMes(string message)        {            byte[] data = Encoding.UTF8.GetBytes(message);            clientSocket.Send(data);            Console.WriteLine("Sended One Message to a ChatClient");        }        //接收客户端发来的消息        private void ReceiveMes()        {            while (true)            {                if (clientSocket.Poll(10, SelectMode.SelectRead))                {                    clientSocket.Close();                    break;                }                int length = clientSocket.Receive(data);                string message = Encoding.UTF8.GetString(data, 0, length);                Console.WriteLine("Receive Message:   " + message);                Server.BroadMessage(message);            }        }        //判断此客户端是否断开        public bool connencted        {            get { return clientSocket.Connected; }        }    }}

unity客户端

/*******************************  Author : TheNO.5*******************************/using UnityEngine;using System.Text;using System.Net;using System.Net.Sockets;using System.Threading;public class ChatManager : MonoBehaviour{    public string ip = "127.0.0.1";    public int port = 7788;    public UILabel text;    public UIInput input;    public GameObject sendButton;    private Socket clientSocket;    private Thread t;    private string str;    void Start()    {        UIEventListener.Get(sendButton).onClick = OnSendButtonClick;        ConnectToServer();        t = new Thread(ReceiveMes);        t.Start();    }    void Update()    {        if(str != null && str != "")        {            text.text += "\n" + str;            str = "";        }    }    void ConnectToServer()    {        clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);        clientSocket.Connect(new IPEndPoint(IPAddress.Parse(ip), port));    }    void ReceiveMes()    {        while (true)        {            byte[] data = new byte[1024];            int length = clientSocket.Receive(data);            string message = Encoding.UTF8.GetString(data, 0, length);            str = message;        }    }    private void SendMes(string message)    {        byte[] data = Encoding.UTF8.GetBytes(message);        clientSocket.Send(data);    }    private void OnSendButtonClick(GameObject go)    {        SendMes(input.value);        input.value = "";    }    void OnDestroy()    {        clientSocket.Shutdown(SocketShutdown.Both);        clientSocket.Close();    }}

这里写图片描述

工程地址

0 0
原创粉丝点击