using UnityEngine;
using System.Collections;
using System.Net.Sockets;
using System.Net;
using System.Text;
public class ChatManager : MonoBehaviour {
public string ipaddress = "192.168.51.102";
public int port = 7788;
public UIInput textInput;
private Socket clientSocket;
// Use this for initialization
void Start () {
ConnectToServer();
}
// Update is called once per frame
void Update () {
}
void ConnectToServer()
{
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 跟服务器端建立连接
clientSocket.Connect(new IPEndPoint(IPAddress.Parse(ipaddress), port));
}
void SendMessage(string message)
{
byte[] data = Encoding.UTF8.GetBytes(message);
clientSocket.Send(data);
}
public void OnSendButtonClick()
{
string value = textInput.value;
SendMessage(value);
textInput.value = "";
}
void OnDestroy()
{
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close(); // 关闭 连接
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//
using System.Net.Sockets;
using System.Net;
namespace _022聊天室_socket_tcp服务器端
{
class Program
{
static List<Client> clientList = new List<Client>();
static void Main(string[] args)
{
Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
tcpServer.Bind(new IPEndPoint(IPAddress.Parse("192.168.51.102"), 7788));
tcpServer.Listen(100);
Console.WriteLine("server running...");
while (true)
{
Socket clientSocket = tcpServer.Accept();
Console.WriteLine("a client is connected!");
Client client = new Client(clientSocket);// 把与每个客户端通信的逻辑(首发消息)放到client类里面进行处理
clientList.Add(client);
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace _022聊天室_socket_tcp服务器端
{
/// <summary>
/// 用来跟客户端做通信
/// </summary>
class Client
{
private Socket clientSocket;
private Thread t;
private byte[] data = new byte[1024]; // 这个是一个数据容器
public Client(Socket s)
{
clientSocket = s;
//启动一个线程,处理客户端的数据接收
t = new Thread(ReceiveMessage);
t.Start();
}
private void ReceiveMessage()
{
// 一直接收客户端的数据
while(true)
{
// 在接收数据之前 判断一下socket连接是否断开
if (clientSocket.Poll(10, SelectMode.SelectRead))
{
break; // 跳出循环 终止线程的执行
}
int length = clientSocket.Receive(data);
string message = Encoding.UTF8.GetString(data, 0, length);
// TODO 接收到数据的时候 要把这个数据 分发到客户端
//
Console.WriteLine("收到了消息" + message);
}
}
}
}