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

yuanyuanluoluo 2019-03-14 05:45:50
服务器往客户端发送消息的时候报这个错:
错误定在://异步发送消息请求
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);
}
}
...全文
3547 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
学长很忙 2019-12-31
  • 打赏
  • 举报
回复
贴主是不是把客户端和服务器的IP地址搞错了?
stherix 2019-03-15
  • 打赏
  • 举报
回复
你这是写了一个tcp服务端,虽然在unity里面弄tcp服务器是不明白要做什么 报错是套接字没有连接,也就是没有客户端连接到服务器上面来 这时候是无法send的,不然你数据发给谁呢
yuanyuanluoluo 2019-03-14
  • 打赏
  • 举报
回复

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧