SocketException: 由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。

[复制链接]
查看11 | 回复3 | 2021-1-27 06:09:58 | 显示全部楼层 |阅读模式
服务器往客户端发送消息的时候报这个错:
错误定在://异步发送消息请求
server_socket.BeginSend(sendData,0,sendData.Length,SocketFlags.None,newSystem.AsyncCallback(SendToServer),server_socket);
但是这是我按着客户端发消息的代码一点点改的不应该有错啊,百思不得原因,希望大佬助我!!!
贴上代码:
usingUnityEngine;
usingSystem.Collections;
usingSystem.Net.Sockets;
usingSystem.Net;
usingSystem.Text;
publicclassServerScript:MonoBehaviour
{
//收到消息后的委托回调
publicdelegatevoidReceiveCallBack(stringcontent);
privatestringreceive_str;
Socketserver;
stringmsg="";
//服务器端收到消息的存储空间
byte[]ReceiveBuffer=newbyte[1024];
//服务器收到消息后的回调委托
privateReceiveCallBackcallback;
privateSocketserver_socket;
privatereadonlyobjectlocker=newobject();
//Usethisforinitialization
voidStart()
{
//初始化服务器
InitServer((stringcontent)=>{
receive_str=content;
});
}
//初始化服务器信息
publicvoidInitServer(ReceiveCallBackcb)
{
this.callback=cb;
//1.
server_socket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//2.
IPEndPointendPoint=newIPEndPoint(IPAddress.Any,5001);
//3.
server_socket.Bind(endPoint);
//4.
server_socket.Listen(10);
//5.开始异步等待客户端的请求链接
server_socket.BeginAccept(newSystem.AsyncCallback(Accept),server_socket);
this.callback("开启服务器"+endPoint.ToString());
}
voidOnGUI()
{
if(receive_str!=null)
{
GUILayout.Label(receive_str);
}
msg=GUI.TextField(newRect(0,0,500,40),msg);
if(GUI.Button(newRect(0,50,100,30),"Send"))
{
SendMessage(msg);
}
}
//接受到客户端的链接请求后的回调函数
voidAccept(System.IAsyncResultar)
{
//获取正在工作的Socket对象
Socketsocket=ar.AsyncStateasSocket;
//存储异步操作的信息,以及用户自定义的数据
Socketworker=socket.EndAccept(ar);
SocketErrorerror;
//开始异步接收客户端发送消息内容
worker.BeginReceive(ReceiveBuffer,0,ReceiveBuffer.Length,SocketFlags.None,newSystem.AsyncCallback(Receive),worker);
//继续异步等待新的客户端链接请求
socket.BeginAccept(newSystem.AsyncCallback(Accept),socket);
}
//服务端收到客户端的消息后的回调函数
voidReceive(System.IAsyncResultar)
{
//获取正在工作的Socket对象
Socketworker=ar.AsyncStateasSocket;
intByteRead=0;
try
{
ByteRead=worker.EndReceive(ar);
}
catch(System.Exceptionex)
{
this.callback(ex.ToString());
}
if(ByteRead>0)
{
stringContent=Encoding.Default.GetString(ReceiveBuffer);
this.callback(Content);
}
//继续异步等待客户端的发送消息请求
worker.BeginReceive(ReceiveBuffer,0,ReceiveBuffer.Length,SocketFlags.None,newSystem.AsyncCallback(Receive),worker);
}
publicvoidSendMessage(stringmessage)
{
if(message==null)
return;
message+="\r\n";
byte[]sendData=Encoding.UTF8.GetBytes(message);
//异步发送消息请求
server_socket.BeginSend(sendData,0,sendData.Length,SocketFlags.None,newSystem.AsyncCallback(SendToServer),server_socket);
}
//发送消息结束的回调函数
voidSendToServer(System.IAsyncResultar)
{
Socketworker=ar.AsyncStateasSocket;
worker.EndSend(ar);
}
}
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:09:58 | 显示全部楼层



回复

使用道具 举报

千问 | 2021-1-27 06:09:58 | 显示全部楼层
你这是写了一个tcp服务端,虽然在unity里面弄tcp服务器是不明白要做什么
报错是套接字没有连接,也就是没有客户端连接到服务器上面来
这时候是无法send的,不然你数据发给谁呢
回复

使用道具 举报

千问 | 2021-1-27 06:09:58 | 显示全部楼层
贴主是不是把客户端和服务器的IP地址搞错了?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行