Unity3d 分别创建了两个线程客户端 服务器连接的简单示例
2015-04-16 08:36
423 查看
[javascript] view
plaincopyprint?
//分别创建了两个线程客户端 服务器连接的简单示例
using UnityEngine;
using System;
using System.Collections;
using System.Threading;
using System.Net.Sockets;
using System.Net;
using System.Text;
public class TCPIPClientServer : MonoBehaviour
{
void Start()
{
Debug.Log(GetIP().ToString());
}
public static Socket ClientSocket;
private void InitConnect()
{
ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
string ip = GetIP().ToString();//服务器ip
IPAddress ipa = IPAddress.Parse(ip);
IPEndPoint iep = new IPEndPoint(ipa, 8000);
try
{
ClientSocket.Connect(iep);//连接到服务器
Thread thread = new Thread(new ThreadStart(ClientReceive));
thread.Start();
}
catch (Exception ex)
{
Debug.Log(ex.Message);
clientReceiveValue = ex.Message;
}
}
/*接收来自服务器上的信息*/
public void ClientReceive()
{
clientReceiveValue = "已经建立连接准备接受数据";
while (true)
{
byte[] bytes = new byte[100];
int rev = ClientSocket.Receive(bytes, bytes.Length, 0);//将数据从连接的 Socket 接收到接收缓冲区的特定位置。
if (rev <= 0)
{
break;
}
string strev = System.Text.Encoding.Default.GetString(bytes);
clientReceiveValue = ("服务器对客户端说:" + strev + "\r\n");
}
}
private void ClientSend()
{
if (ClientSocket.Connected)//判断Socket是否已连接
{
byte[] SendMessage = new byte[100];
SendMessage = Encoding.ASCII.GetBytes(clientSendValue);
ClientSocket.Send(SendMessage);//从数据中的指示位置开始将数据发送到连接的Socket。
}
else
{
Debug.Log("未建立连接!");
clientSendValue = "未建立连接!";
}
}
private string clientReceiveValue = "";
private string clientSendValue = "";
private string serverReceiveValue = "";
private string serverSendValue = "";
void OnGUI()
{
//服务器
GUI.TextField(new Rect(100, 100, 200, 50), serverReceiveValue);
if (GUI.Button(new Rect(310, 100, 100, 20), "开始监听"))
{
Listen();
}
serverSendValue = GUI.TextField(new Rect(100, 150, 200, 40), serverSendValue);
if (GUI.Button(new Rect(310, 150, 100, 20), "服务器发送"))
{
SeverSend();
}
///客户端
GUI.TextField(new Rect(100, 350, 200, 40), clientReceiveValue);
if (GUI.Button(new Rect(310, 350, 100, 20), "连接服务器"))
{
InitConnect();
}
clientSendValue = GUI.TextField(new Rect(100, 400, 200, 40), clientSendValue);
if (GUI.Button(new Rect(310, 400, 100, 20), "客户端发送"))
{
ClientSend();
}
}
Thread LisThread;
Socket LisSocket;
Socket newSocket;
EndPoint point;
string strmes = String.Empty;
int port = 8000;//定义侦听端口号
private void Listen()
{
LisThread = new Thread(new ThreadStart(BeginListern));//开线程执行BeginListern方法
LisThread.Start();//线程开始执行
serverReceiveValue = GetIP().ToString() + "正在监听 ";
}
private void BeginListern()
{
LisSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//实例化Socket
IPAddress ServerIp = GetIP();/*获取本地服务器的ip地址 */
IPEndPoint iep = new IPEndPoint(ServerIp, port);
LisSocket.Bind(iep); /*将Socket绑定ip */
LisSocket.Listen(50); //Socket开始监听
newSocket = LisSocket.Accept();//获取连接请求的Socket
/*接收客户端Socket所发的信息 */
while (true)
{
try
{
byte[] byteMessage = new byte[100];
newSocket.Receive(byteMessage);//接收信息
point = newSocket.RemoteEndPoint;//获取客户端的Socket的相关信息
IPEndPoint IPpoint = (IPEndPoint)point;
strmes += IPpoint.Address.ToString() + "说" + Encoding.Default.GetString(byteMessage).Trim(new char[] { '\0' }) + "\r\n";
serverReceiveValue = strmes;
}
catch (SocketException ex)
{
Debug.Log(ex.ToString());
serverReceiveValue = ex.ToString();
}
}
}
private IPAddress GetIP()
{ /*获取本地服务器的ip地址 */
IPHostEntry iep = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ip = iep.AddressList[0];
return ip;
}
private void SeverSend()
{
byte[] byteData = Encoding.Default.GetBytes(serverSendValue);
newSocket.Send(byteData);//发送信息即由服务器往客户端上发信息
}
}
plaincopyprint?
//分别创建了两个线程客户端 服务器连接的简单示例
using UnityEngine;
using System;
using System.Collections;
using System.Threading;
using System.Net.Sockets;
using System.Net;
using System.Text;
public class TCPIPClientServer : MonoBehaviour
{
void Start()
{
Debug.Log(GetIP().ToString());
}
public static Socket ClientSocket;
private void InitConnect()
{
ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
string ip = GetIP().ToString();//服务器ip
IPAddress ipa = IPAddress.Parse(ip);
IPEndPoint iep = new IPEndPoint(ipa, 8000);
try
{
ClientSocket.Connect(iep);//连接到服务器
Thread thread = new Thread(new ThreadStart(ClientReceive));
thread.Start();
}
catch (Exception ex)
{
Debug.Log(ex.Message);
clientReceiveValue = ex.Message;
}
}
/*接收来自服务器上的信息*/
public void ClientReceive()
{
clientReceiveValue = "已经建立连接准备接受数据";
while (true)
{
byte[] bytes = new byte[100];
int rev = ClientSocket.Receive(bytes, bytes.Length, 0);//将数据从连接的 Socket 接收到接收缓冲区的特定位置。
if (rev <= 0)
{
break;
}
string strev = System.Text.Encoding.Default.GetString(bytes);
clientReceiveValue = ("服务器对客户端说:" + strev + "\r\n");
}
}
private void ClientSend()
{
if (ClientSocket.Connected)//判断Socket是否已连接
{
byte[] SendMessage = new byte[100];
SendMessage = Encoding.ASCII.GetBytes(clientSendValue);
ClientSocket.Send(SendMessage);//从数据中的指示位置开始将数据发送到连接的Socket。
}
else
{
Debug.Log("未建立连接!");
clientSendValue = "未建立连接!";
}
}
private string clientReceiveValue = "";
private string clientSendValue = "";
private string serverReceiveValue = "";
private string serverSendValue = "";
void OnGUI()
{
//服务器
GUI.TextField(new Rect(100, 100, 200, 50), serverReceiveValue);
if (GUI.Button(new Rect(310, 100, 100, 20), "开始监听"))
{
Listen();
}
serverSendValue = GUI.TextField(new Rect(100, 150, 200, 40), serverSendValue);
if (GUI.Button(new Rect(310, 150, 100, 20), "服务器发送"))
{
SeverSend();
}
///客户端
GUI.TextField(new Rect(100, 350, 200, 40), clientReceiveValue);
if (GUI.Button(new Rect(310, 350, 100, 20), "连接服务器"))
{
InitConnect();
}
clientSendValue = GUI.TextField(new Rect(100, 400, 200, 40), clientSendValue);
if (GUI.Button(new Rect(310, 400, 100, 20), "客户端发送"))
{
ClientSend();
}
}
Thread LisThread;
Socket LisSocket;
Socket newSocket;
EndPoint point;
string strmes = String.Empty;
int port = 8000;//定义侦听端口号
private void Listen()
{
LisThread = new Thread(new ThreadStart(BeginListern));//开线程执行BeginListern方法
LisThread.Start();//线程开始执行
serverReceiveValue = GetIP().ToString() + "正在监听 ";
}
private void BeginListern()
{
LisSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//实例化Socket
IPAddress ServerIp = GetIP();/*获取本地服务器的ip地址 */
IPEndPoint iep = new IPEndPoint(ServerIp, port);
LisSocket.Bind(iep); /*将Socket绑定ip */
LisSocket.Listen(50); //Socket开始监听
newSocket = LisSocket.Accept();//获取连接请求的Socket
/*接收客户端Socket所发的信息 */
while (true)
{
try
{
byte[] byteMessage = new byte[100];
newSocket.Receive(byteMessage);//接收信息
point = newSocket.RemoteEndPoint;//获取客户端的Socket的相关信息
IPEndPoint IPpoint = (IPEndPoint)point;
strmes += IPpoint.Address.ToString() + "说" + Encoding.Default.GetString(byteMessage).Trim(new char[] { '\0' }) + "\r\n";
serverReceiveValue = strmes;
}
catch (SocketException ex)
{
Debug.Log(ex.ToString());
serverReceiveValue = ex.ToString();
}
}
}
private IPAddress GetIP()
{ /*获取本地服务器的ip地址 */
IPHostEntry iep = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ip = iep.AddressList[0];
return ip;
}
private void SeverSend()
{
byte[] byteData = Encoding.Default.GetBytes(serverSendValue);
newSocket.Send(byteData);//发送信息即由服务器往客户端上发信息
}
}
相关文章推荐
- Unity3d 分别创建了两个线程客户端 服务器连接的简单示例
- Unity3D笔记——TCP简单服务器和客户端的连接和异步接受
- Photon Server游戏服务器从零开始学习(三)在Unity3D中创建客户端与服务器连接及发送请求
- SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论 SignalR 简单示例 通过三个DEMO学会SignalR的三种实现方式 SignalR推送框架两个项目永久连接通讯使用 SignalR 集线器简单实例2 用SignalR创建实时永久长连接异步网络应用程序
- android客户端与servlet服务器交互简单示例
- 2条腿的OAuth客户端/服务器简单示例
- 一个简单的TCP服务器与客户端示例
- Android客户端post方式连接web(servlet)服务器实现简单登录
- 简单的无连接的udp服务器和客户端
- 创建应用服务器连接客户端
- 什么是socket?什么是socket的长、短连接?java如何简单实现socket客户端和服务器?
- Thread、Runnable、Callable三种创建线程的简单示例及区别简介
- HTTPS-HSTS协议(强制客户端使用HTTPS与服务器创建连接)
- 守护进程的创建,服务器关闭不影响客户端的连接
- 一个简单的连接服务器示例
- Java通信之客户端的创建以及客户端和服务器的简单交互
- IdentityServer3——入门教程:创建简单的OAuth2.0服务器,客户端和API
- 一个简单的基于node.js的TCP服务器和基于C++的TCP客户端通信示例程序
- Python 连接MongoDB并比较两个字符串相似度的简单示例
- Android 两个简单线程使用示例