socket之简单的unity3d聊天室__tcp协议(代码片段)

qqw123 qqw123     2023-01-10     215

关键词:

服务器端程序

技术分享图片
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Net;
 5 using System.Net.Sockets;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8 namespace 聊天室_服务器端_TCP
 9 
10     class Program
11     
12         //存放客户端
13         static List<Client> clientList = new List<Client>();
14 
15         //广播消息
16         public static void BroadCastMessage(string message)
17         
18             //创建未连接的list
19             var notConnectedList = new List<Client>();
20             foreach(Client client in clientList)
21             
22                 if (client.Connected)   //给所有连接的客户端发送消息;
23                     client.SendMessage(message);
24                 else    //把未连接的客户端加入list
25                 
26                     notConnectedList.Add(client);
27                 
28             
29             //移除未连接的客户端
30             foreach(var temp in notConnectedList)
31             
32                 clientList.Remove(temp);
33             
34         
35 
36         static void Main(string[] args)
37         
38             //实例化服务器端Socket并指定IP地址类型(IPV4),套接字类型(流类型),通信协议(TCP)
39             Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
40 
41             //绑定终端(设置IP地址,端口号(范围为0-65535之间随意取,为避免端口号已被其他软件占用,可以取大点))
42             tcpServer.Bind(new IPEndPoint(IPAddress.Parse("192.168.0.107"), 7788));
43 
44             //开始监听,等待客户端接入,接入后执行后续操作
45             tcpServer.Listen(100);
46             Console.WriteLine("开始监听");
47 
48             //循环等待客户端接入
49             while (true)
50             
51 
52                 Socket ClientSocket = tcpServer.Accept();
53                 Console.WriteLine("一个客户端连接进来了");
54                 Client client = new Client(ClientSocket);
55                 clientList.Add(client);
56             
57 
58         
59     
60 
Main
技术分享图片
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Net.Sockets;
 5 using System.Text;
 6 using System.Threading;
 7 using System.Threading.Tasks;
 8 
 9 namespace 聊天室_服务器端_TCP
10 
11     public class Client
12     
13         private Socket clientsocket;
14         private Thread t;       //线程
15         private byte[] data = new byte[1024];
16         public Client(Socket s)
17         
18             this.clientsocket = s;
19 
20             //启动一个线程,处理客户端数据接收
21             t = new Thread(ReceiveMessage);
22             t.Start();
23         
24 
25         private void ReceiveMessage()
26         
27             //一直接收客户端数据
28             while(true)
29             
30                 if(clientsocket.Poll(10,SelectMode.SelectRead))
31                 
32                     clientsocket.Close();
33                     break;
34                 
35                 int length= clientsocket.Receive(data);
36                 string message = Encoding.UTF8.GetString(data, 0, length);
37                 //接收到数据时,要把这个数据分发到客户端
38                 //广播消息
39                 Program.BroadCastMessage(message);
40                 Console.WriteLine("收到消息:" + message);
41             
42         
43 
44         //发送消息给客户端
45         public void SendMessage(string message)
46         
47             byte[] data = Encoding.UTF8.GetBytes(message);
48             clientsocket.Send(data);
49         
50 
51         //判断是否连接
52         public bool Connected
53         
54             get  return clientsocket.Connected; 
55         
56     
57 
Client类

 

客户端

技术分享图片
 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using System.Net.Sockets;
 4 using UnityEngine;
 5 using System.Net;
 6 using System.Text;
 7 using UnityEngine.UI;
 8 using System.Threading;
 9 
10 public class ChatManger : MonoBehaviour 
11 
12     public string ipaddress = "192.168.0.107";
13     public int port = 7788;
14     public Text Input;      //InputField中显示输入的text
15     public Text Label;      //聊天室显示的text
16 
17     private Socket client_socket;
18     private Thread t;
19     private byte[] data = new byte[1024];       //数据容器
20     private string message = "";            //消息容器
21     // Use this for initialization
22     void Start () 
23         OnConnectedToServer();
24     
25     
26     // Update is called once per frame
27     void Update () 
28         if(message!=""&&message!=null)
29         
30             Label.text += "
" + message;
31             message = "";
32         
33     
34 
35     //连接至服务器,并创建一个新线程用于接受消息
36     public void OnConnectedToServer()
37     
38         client_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
39         client_socket.Connect(new IPEndPoint(IPAddress.Parse(ipaddress),port));
40 
41         t = new Thread(ReceiveMessage);
42         t.Start();
43     
44 
45     //接收消息
46     public void ReceiveMessage()
47     
48         while(true)
49         
50             if (client_socket.Poll(10, SelectMode.SelectRead))
51             
52                client_socket.Close();
53                 break;
54             
55             int length = client_socket.Receive(data);
56             message = Encoding.UTF8.GetString(data, 0, length);
57             //Label.text += "
" + message;     unity不允许在单独的线程里去操控其组件
58         
59     
60     //发送消息
61     public new void SendMessage(string message)
62     
63         byte[] data = Encoding.UTF8.GetBytes(message);
64         client_socket.Send(data);
65     
66     //点击发送按钮
67     public void OnSendButtonClick()
68     
69         
70         SendMessage(Input.text);
71         Input.GetComponentInParent<InputField>().text = "";
72     
73 
74     //当Mono被销毁时调用此方法
75     private void OnDestroy()
76     
77         client_socket.Shutdown(SocketShutdown.Both);
78         client_socket.Close();
79     
80 
客户端代码

技术分享图片

 

网络编程之tcp客户端开发和tcp服务端开发(代码片段)

...字建立连接发送数据接收数据关闭客户端套接字 importsocketif__name__==‘__main__‘:#创建tcp客户端套接字#1.AF_INET:表示ipv4#2.SOCK_STREAM:tcp传输协议tcp_client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#和服务端应用程序建立连接tcp_clie... 查看详情

ajax简单应用之个人简历页面搭建(代码片段)

1.搭建HTTP静态Web服务器。代码实现:1#1.导入socket模块2importsocket3importthreading456#创建服务器类7classHttpServerSocket(object):8#给服务器类的对象设置属性9def__init__(self):10#2.创建Socket对象11self.server_socket=socket.socket(socket.AF_I 查看详情

tcp服务端socket

importsocketif__name__==‘__main__‘:#创建tcp服务端sockettcp_server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#立即释放端口号,重用端口#SOL_SOCKET:表示当前socket#SO_REUSEADDR:是否立即释放端口选项#True:表示立即释放端口tcp_server_ 查看详情

网络编程-tcp(代码片段)

...于打电话,需要先建立链接,区分客户端与服务端。importsocketdefmain():#1.创建tcp的套接字tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#2.链接服务器#tcp_socket.connect(("192.168.33.11",7890))server_ip=input("请输入要链接的服务器的ip:")server_por... 查看详情

tcp_协议_socket接口-jmeter

1.ip2.端口号 3.传入参数4.告诉软件返回 最后以为是什么,不然就会报错或者无限制的等待 查ascll码表 启动接口的方法        查看详情

tcp文件下载客户端+服务端

客户端:importsocketif__name__==‘__main__‘:#创建tcp客户端sockettcp_client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#和服务端socket建立连接tcp_client_socket.connect(("192.168.131.106",7878))#接收用户输入的文件名fil 查看详情

java利用tcp编程实现简单聊天室

...体可以去尚学堂官网观看视频学习一、实现思路  实现聊天室的最核心部分就是JAVA的TCP网络编程。  TCP传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,在Java中我们利用ServerSocket类来建立服务端,... 查看详情

游戏开发实战unity使用socket通信实现简单的多人聊天室(万字详解|网络|tcp|通信|mirror|networking)(代码片段)

文章目录一、前言二、简单的Socket通信:多人聊天室1、服务端:python代码1.1、importsocket1.2、构造socket对象1.3、绑定/监听端口1.3、监听客户端连接1.4、接收客户端socket消息1.5、多线程1.6、完整代码:game_server.py2、客户... 查看详情

游戏开发实战unity使用socket通信实现简单的多人聊天室(万字详解|网络|tcp|通信|mirror|networking)(代码片段)

文章目录一、前言二、简单的Socket通信:多人聊天室1、服务端:python代码1.1、importsocket1.2、构造socket对象1.3、绑定/监听端口1.3、监听客户端连接1.4、接收客户端socket消息1.5、多线程1.6、完整代码:game_server.py2、客户... 查看详情

qt学习_网络编程_tcp通信聊天(代码片段)

网络编程TCP通信1.用到的类QTcpServer公共函数:void close()QString errorString()constbool isListening()constbool listen(constQHostAddress&address=QHostAddress::Any,quint16port=0)QHostAddre 查看详情

python高性能代码之多线程优化(代码片段)

...常见的端口扫描器为实例端口扫描器的原理很简单,操作socket来判断连接状态确定主机端口的开放情况。importsocketdefscan(port):s=socket.socket()ifs.connect_ex((‘localhost‘,port))==0:printport,‘open‘s.close()if__name__==‘__main__‘:map(scan,range(1,655 查看详情

python-tcp服务端程序开发(代码片段)

...套接字被动套接字:不能收发信息TCP服务端的流程:1.创建socket对象2.绑定,固定服务器的ip和端口3.设置监听,将主动套接字变成被动套接字,可以接收新的客户端连接,4.阻塞等待客户端的连接,有客户端连接,会返回一个新的socket,用来... 查看详情

基于tcp协议简单qq聊天(代码片段)

#server端importsocketip_port=(‘127.0.0.1‘,8080)sk=socket.socket()sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)sk.bind(ip_port)sk.listen()conn,addr=sk.accept()whileTrue:msg=conn.recv(1024).deco 查看详情

udp之socket通讯

分享一个简单的socket通讯,简单易理解TCP协议与UDP协议的区别1.基于连接与无连接;2.对系统资源的要求(TCP较多,UDP少);3.UDP程序结构较简单;4.流模式与数据报模式;5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP... 查看详情

线程进阶

在了解进程之后,我们可以做一个多线程的聊天室服务端importsocketfrommultiprocessingimportProcessdeftalk(conn):conn.send(b‘connected‘)ret=conn.recv(1024)print(ret)if__name__==‘__main__‘:sk=socket.socket()sk.bind((‘127.0.0.1‘,808 查看详情

pythonsocket聊天室(tcpserverclient)(代码片段)

importsocket,os,hmac,pickle,threading,datetimeclassServer:def__init__(self,secret_key):self.sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)self.addr=(\'127.0.0.1\',8088)self.users=self.secret_ 查看详情

一个简单的网络聊天程序实现

socket简介Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个so... 查看详情

java网络编程基础—基于tcp的nio简单聊天系统

在Java网络编程基础(四)中提到了基于Socket的TCP/IP简单聊天系统实现了一个多客户端之间护法消息的简单聊天系统。其服务端采用了多线程来处理多个客户端的消息发送,并转发给目的用户。但是由于它是基于Socket的,因此是... 查看详情