using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System;
using System.Threading;
namespace HelloSocket
{
/// <summary>
///配置信息
/// </summary>
/// ip地址 端口 类型:TCP/UDP
class HelloAddress
{
private static string host ="127.0.0.1";
private static int port = 5055;
private static IPAddress ip = IPAddress.Parse(host);
public static IPEndPoint IPEP = new IPEndPoint(ip, port);
public static Socket hSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
///<summary>
///修改配置信息
///</summary>
///ip地址 端口 类型:TCP/UDP
public static void SetHelloAddress(string ipStr, int iPort, System.Net.Sockets.ProtocolType type)
{
host = ipStr;
port = iPort;
ip = IPAddress.Parse(host);
IPEP = new IPEndPoint(ip, port);
hSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, type);
}
}
///<summary>
///客户端
///</summary>
/// API
class HelloClient : HelloAddress
{
///<summary>
///连接服务端
///</summary>
public static void Main()
{
try
{
hSocket.Connect(IPEP);
Thread threadConnect = new Thread(new ThreadStart(ReceiveMessage));
threadConnect.Start();
}
catch (ArgumentNullException e)
{
Debug.Log(e.ToString());
}
catch (SocketException e)
{
Debug.Log(e.ToString());
}
}
///<summary>
///发送信息
///</summary>
public static void SendMessage(string sendStr)
{
//确定是否连接
if (hSocket.Connected)
{
IPEndPoint ipe = (IPEndPoint)hSocket.RemoteEndPoint;
sendStr = ipe.ToString() + sendStr;
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
hSocket.Send(bs, bs.Length, 0);
}
}
///<summary>
///接收信息
///</summary>
private static void ReceiveMessage()
{
while (true)
{
byte[] recvBytes = new byte[1024];
int iBytes = hSocket.Receive(recvBytes, recvBytes.Length, 0);
if (iBytes <= 0)
{
break;
}
string recvStr = "";
recvStr+=Encoding.ASCII.GetString(recvBytes,0,iBytes);
Debug.Log("服务端返回的数据:" + recvStr);
}
}
///<summary>
///关闭套接字
///<summary>
public static void Close()
{
hSocket.Close();
}
}
///<summary>
///服务端
///</summary>
/// API
class HelloServer : HelloAddress
{
//存储连接服务端的所有用户
public static List<Socket> listPlayer = new List<Socket>();
private static Socket sTemp;
///<summary>
///服务端 绑定地址并监听
///</summary>
public static void Main()
{
try
{
Thread threadListenAccept = new Thread(new ThreadStart(ListenAccept));
threadListenAccept.Start();
}
catch (ArgumentNullException e)
{
Debug.Log(e.ToString());
}
catch (SocketException e)
{
Debug.Log(e.ToString());
}
}
///<summary>
///监听用户连接
///</summary>
private static void ListenAccept()
{
hSocket.Bind(IPEP);
hSocket.Listen(0);
sTemp = hSocket.Accept();
listPlayer.Add(sTemp);
Thread threadReceiveMessage = new Thread(new ThreadStart(ReceiveMessage));
threadReceiveMessage.Start();
while (true)
{
sTemp = hSocket.Accept();
listPlayer.Add(sTemp);
}
}
///<summary>
///接收信息
///<summary>
private static void ReceiveMessage()
{
while (true)
{
byte[] recvBytes = new byte[1024];
int iBytes =sTemp.Receive(recvBytes, recvBytes.Length, 0);
if (iBytes <= 0)
{
break;
}
string recvStr = "";
recvStr += Encoding.ASCII.GetString(recvBytes, 0, iBytes);
Debug.Log("客户端获取的数据:" + recvStr);
}
}
///<summary>
///发送信息
///</summary>
public static void SendMessage(string sendStr)
{
IPEndPoint ipe = (IPEndPoint)sTemp.RemoteEndPoint;
sendStr = ipe.ToString() + sendStr;
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
sTemp.Send(bs, bs.Length, 0);
}
///<summary>
///关闭套接字
///</summary>
public static void Close()
{
for (int i = 0; i < listPlayer.Count; i++)
{
listPlayer[i].Close();
}
sTemp.Close();
hSocket.Close();
}
}
}