客户端代码
using UnityEngine;
using System.Collections;
using System.Net.Sockets;
using System.IO;
using System.Threading;
using System;
using ProtoBuf;
using System.Net;
using ProtoBuf.Meta;
using ClientMessage;
using ServerMessage;
public class Client : MonoBehaviour
{
private byte[] result = new byte[1024];
// Use this for initialization
void Start()
{
IPAddress ip = IPAddress.Parse("127.0.0.1");
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
clientSocket.Connect(new IPEndPoint(ip, 8885));
int receiveLength = clientSocket.Receive(result, result.Length, SocketFlags.None);
Debug.Log("收到的长度:" + receiveLength);
SignUpResponse s = new SignUpResponse();
MemoryStream ms = new MemoryStream();
ms.Write(result,0,receiveLength);
s = ProtoBuf.Serializer.Deserialize<SignUpResponse>(ms);
Debug.Log("错误代码:"+s.errorCode);
}
catch (Exception e)
{
Debug.Log(e.ToString());
}
}
}
服务器端代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;
using ProtoBuf;
using ProtoBuf.Meta;
using ClientMessage;
using ServerMessage;
namespace GameServer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
TcpServer();
}
private static byte[] result;
private const int port = 8885;
private Socket serverSocket;
private Socket clientSocket;
public void TcpServer()
{
IPAddress ip = IPAddress.Parse("127.0.0.1");
textBox1.Text += "本机IP地址:" + ip;
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(new IPEndPoint(ip, port));
serverSocket.Listen(10);
textBox1.Text += "开始监听端口:" + port;
Thread threadAccept = new Thread(AcceptClientConnect);
threadAccept.Start();
}
private void AcceptClientConnect()
{
clientSocket = serverSocket.Accept();
if (clientSocket != null)
{
SignUpResponse s = new SignUpResponse();
s.errorCode = 0;
s.version = 1;
MemoryStream ms = new MemoryStream();
ProtoBuf.Serializer.Serialize<SignUpResponse>(ms, s);
result = ms.ToArray();
ms.Close();
clientSocket.Send(result,result.Length,SocketFlags.None);
textBox1.Text +="长度:"+ result.Length;
}
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
}
}
proto协议
package ServerMessage;
message SignUpResponse
{
optional int32 errorCode = 1;
optional float version = 2;
}