服務器往客戶端發送訊息的時候報這個錯:
錯誤定在://異步發送訊息請求
server_socket.BeginSend(sendData, 0, sendData.Length, SocketFlags.None, new System.AsyncCallback(SendToServer), server_socket);
但是這是我按著客戶端發訊息的代碼一點點改的不應該有錯啊,百思不得原因,希望大佬助我!!!
貼上代碼:
using UnityEngine;
using System.Collections;
using System.Net.Sockets;
using System.Net;
using System.Text;
public class ServerScript : MonoBehaviour
{
//收到訊息后的委托回呼
public delegate void ReceiveCallBack(string content);
private string receive_str;
Socket server;
string msg = "";
//服務器端收到訊息的存盤空間
byte[] ReceiveBuffer = new byte[1024];
//服務器收到訊息后的回呼委托
private ReceiveCallBack callback;
private Socket server_socket;
private readonly object locker = new object();
// Use this for initialization
void Start()
{
//初始化服務器
InitServer((string content) => {
receive_str = content;
});
}
//初始化服務器資訊
public void InitServer(ReceiveCallBack cb)
{
this.callback = cb;
// 1.
server_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 2.
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 5001);
// 3.
server_socket.Bind(endPoint);
// 4.
server_socket.Listen(10);
// 5.開始異步等待客戶端的請求鏈接
server_socket.BeginAccept(new System.AsyncCallback(Accept), server_socket);
this.callback("開啟服務器" + endPoint.ToString());
}
void OnGUI()
{
if (receive_str != null)
{
GUILayout.Label(receive_str);
}
msg = GUI.TextField(new Rect(0, 0, 500, 40), msg);
if (GUI.Button(new Rect(0, 50, 100, 30), "Send"))
{
SendMessage(msg);
}
}
//接受到客戶端的鏈接請求后的回呼函式
void Accept(System.IAsyncResult ar)
{
//獲取正在作業的Socket物件
Socket socket = ar.AsyncState as Socket;
//存盤異步操作的資訊,以及用戶自定義的資料
Socket worker = socket.EndAccept(ar);
SocketError error;
//開始異步接收客戶端發送訊息內容
worker.BeginReceive(ReceiveBuffer, 0, ReceiveBuffer.Length, SocketFlags.None, new System.AsyncCallback(Receive), worker);
//繼續異步等待新的客戶端鏈接請求
socket.BeginAccept(new System.AsyncCallback(Accept), socket);
}
//服務端收到客戶端的訊息后的回呼函式
void Receive(System.IAsyncResult ar)
{
//獲取正在作業的Socket物件
Socket worker = ar.AsyncState as Socket;
int ByteRead = 0;
try
{
ByteRead = worker.EndReceive(ar);
}
catch (System.Exception ex)
{
this.callback(ex.ToString());
}
if (ByteRead > 0)
{
string Content = Encoding.Default.GetString(ReceiveBuffer);
this.callback(Content);
}
//繼續異步等待客戶端的發送訊息請求
worker.BeginReceive(ReceiveBuffer, 0, ReceiveBuffer.Length, SocketFlags.None, new System.AsyncCallback(Receive), worker);
}
public void SendMessage(string message)
{
if (message == null)
return;
message += "\r\n";
byte[] sendData = Encoding.UTF8.GetBytes(message);
//異步發送訊息請求
server_socket.BeginSend(sendData, 0, sendData.Length, SocketFlags.None, new System.AsyncCallback(SendToServer), server_socket);
}
//發送訊息結束的回呼函式
void SendToServer(System.IAsyncResult ar)
{
Socket worker = ar.AsyncState as Socket;
worker.EndSend(ar);
}
}
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
你這是寫了一個tcp服務端,雖然在unity里面弄tcp服務器是不明白要做什么報錯是套接字沒有連接,也就是沒有客戶端連接到服務器上面來
這時候是無法send的,不然你資料發給誰呢
uj5u.com熱心網友回復:
貼主是不是把客戶端和服務器的IP地址搞錯了?轉載請註明出處,本文鏈接:https://www.uj5u.com/net/81434.html
標籤:C#
