//点击开始监听时 在服务端创建一个负责监听IP和端口号的Socket
Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(_ip);
//创建对象端口
IPEndPoint point = new IPEndPoint(ip, _port);
socketWatch.Bind(point);//绑定端口号
Debug.Log("监听成功!");
socketWatch.Listen(10);//设置监听,最大同时连接10台
//创建监听线程
Thread thread = new Thread(Listen);
thread.IsBackground = true;
thread.Start(socketWatch);
catch { }
///
/// 等待客户端的连接 并且创建与之通信的Socket
///
Socket socketSend;
void Listen(object o)
Socket socketWatch = o as Socket;
while (true)
socketSend = socketWatch.Accept();//等待接收客户端连接
Debug.Log(socketSend.RemoteEndPoint.ToString() + ":" + "连接成功!");
//开启一个新线程,执行接收消息方法
Thread r_thread = new Thread(Received);
r_thread.IsBackground = true;
r_thread.Start(socketSend);
catch { }
///
/// 服务器端不停的接收客户端发来的消息
///
///
void Received(object o)
Socket socketSend = o as Socket;
while (true)
//客户端连接服务器成功后,服务器接收客户端发送的消息
byte[] buffer = new byte[1024 * 1024 * 3];
//实际接收到的有效字节数
int len = socketSend.Receive(buffer);
if (len == 0)
break;
string str = Encoding.UTF8.GetString(buffer, 0, len);
Debug.Log("服务器打印:" + socketSend.RemoteEndPoint + ":" + str);
Send("我收到了");
catch { }
///
/// 服务器向客户端发送消息
///
///
void Send(string str)
byte[] buffer = Encoding.UTF8.GetBytes(str);
socketSend.Send(buffer);
using System;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine;
using UnityEngine.UI;
public class SocketClient : MonoBehaviour {
public InputField input;
// Use this for initialization
public void StartClient () {
bt_connect_Click();
// Update is called once per frame
void Update () {
public void SendMsg()
bt_send_Click(input.text);
Socket socketSend;
private void bt_connect_Click()
int _port = 6000;
string _ip = "127.0.0.1";
//创建客户端Socket,获得远程ip和端口号
socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(_ip);
IPEndPoint point = new IPEndPoint(ip, _port);
socketSend.Connect(point);
Debug.Log("连接成功!");
//开启新的线程,不停的接收服务器发来的消息
Thread c_thread = new Thread(Received);
c_thread.IsBackground = true;
c_thread.Start();
catch (Exception)
Debug.Log("IP或者端口号错误...");
/// <summary>
/// 接收服务端返回的消息
/// </summary>
void Received()
while (true)
byte[] buffer = new byte[1024 * 1024 * 3];
//实际接收到的有效字节数
int len = socketSend.Receive(buffer);
if (len == 0)
break;
string str = Encoding.UTF8.GetString(buffer, 0, len);
Debug.Log("客户端打印:" + socketSend.RemoteEndPoint + ":" + str);
catch { }
/// <summary>
/// 向服务器发送消息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void bt_send_Click(string str)
string msg = str;
byte[] buffer = new byte[1024 * 1024 * 3];
buffer = Encoding.UTF8.GetBytes(msg);
socketSend.Send(buffer);
catch { }