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
- Scoket 简单聊天室 服务器+客户端
- C# Scoket 简单的服务器客户端通讯
- 基于scoket通信的简单客户端—服务器通信程序
- Android网络应用之使用Scoket的Android客户端与TCP服务器的简单交互
- java之Scoket 客户端和服务器的发送与接收
- Android开发之简单的聊天室(客户端与服务器进行通信)
- Android开发之简单的聊天室(客户端与服务器进行通信)
- Linux 下基于socket的简单网络聊天室(服务器与客户端)
- Scoket网络编程客户端
- Scoket客户端实例
- Python简单的多客户端聊天室程序
- socket编程:简单的多客户端聊天室
- javaFX实现简单聊天室应用(客户端)
- 详细介绍Scoket编程 包含最简单实现但客户端、多客户端多会话 、上传
- java Scoket的c\\s结构聊天室
- 聊天室客户端
- 简单socket服务器客户端
- C# 异步TCP Socket聊天室(1服务器,N客户端)
- (继承及其访问限定符)&&(派生类及其默认成员函数)&&(赋值兼容规则)
- 利用Nunit进行单元测试 NHibernate在SQL server中建表
- 支持 efi 的主板 双系统安装 ubuntu - 学习 EFI 和 gpt
- 维纳滤波在图像复原中的应用
- 用户态软件读写root文件方法
- Scoket 简单聊天室 服务器+客户端
- 信息无障碍网站链接
- linux-c++调用shell
- Android studio butterknife简单使用
- 搭建nginx与安装vsftpd提示530 Login incorrect
- 将ubuntu屏幕调大
- linux centos开启 80、22、3306端口方案
- UVA - 1644 - Prime Gap(找相邻素数差值)
- Makefile文件的编写