unity 客户端 服务端 连接
2014-02-11 23:58
274 查看
//分别创建了两个线程客户端 服务器连接的简单示例
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);//发送信息即由服务器往客户端上发信息
}
}
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);//发送信息即由服务器往客户端上发信息
}
}
相关文章推荐
- Unity客户端连接java服务端并通过json的形式接收数据-客户端
- Unity使用C#实现简单Scoket连接及服务端与客户端通讯
- 使用Unity3D内置Network实现简单的客户端与服务端相连接
- oracle客户端与服务端的连接
- 最最简单的客户端与服务端的连接
- 使用oracle11g_instant_client来解决在不安装oracle客户端的情况下连接服务端
- Java Socket实现多个客户端连接同一个服务端
- PostgreSQL数据库服务端监听设置及客户端连接方法教程
- 连接主机Java网络编程(一)- 一个简单的服务端/客户端应用程序
- 使用Socket,让连接客户端可以对服务端执行相应的指令
- Netty实现服务端客户端长连接通讯及心跳检测
- 基于Actor模式的c#网络游戏服务器的实现和Unity游戏客户端的连接
- 当虚拟机的客户端与服务端连接时候,虚拟机卡死了
- coturn 中的turnserver服务端配置无错,但客户端在连接turnserver后总是不
- 一客户端多服务端UDP本地连接代码(同时发送)
- PostgreSQL服务端监听设置及客户端连接方法
- 打印机安装与共享(服务端与打印机连接,客户端通过网络共享访问)
- Linux网络编程中服务端判断客户端断开连接。
- DB2客户端连接服务端的方法
- 客户端如何更具需要连接不同的服务端