新手学习Socket编程问题,搞不明白过程,感觉不符合逻辑

zdczdccccc 2014-05-16 11:58:01

//服务器端
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace SimpleUdpSrvr
{
class Program
{
static void Main(string[] args)
{
int recv;
byte[] data = new byte[1024];
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);//定义一网络端点
Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//定义一个Socket
newsock.Bind(ipep);//Socket与本地的一个终结点相关联
Console.WriteLine("Waiting for a client..");

IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);//定义要发送的计算机的地址
EndPoint Remote = (EndPoint)(sender);//
recv = newsock.ReceiveFrom(data, ref Remote);//接受数据
Console.WriteLine("Message received from{0}:", Remote.ToString());
Console.WriteLine(Encoding.ASCII.GetBytes(data,0,recv));

string welcome = "Welcome to my test server!";
data = Encoding.ASCII.GetBytes(welcome);
newsock.SendTo(data, data.Length, SocketFlags.None, Remote);
while (true)
{
data = new byte[1024];
recv = newsock.ReceiveFrom(data, ref Remote);
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
newsock.SendTo(data, recv, SocketFlags.None, Remote);//①①①①①①①①①
}
}
}
}




//客户端
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace SimpleUdpClient
{
class Program
{
static void Main(string[] args)
{
byte[] data = new byte[1024];//定义一个数组用来做数据的缓冲区
string input, stringData;
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
string welcome = "Hello,are you there?";
data = Encoding.ASCII.GetBytes(welcome);
server.SendTo(data, data.Length, SocketFlags.None, ipep);//②②②②②②②②②②

IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint Remote = (EndPoint)sender;
data = new byte[1024];
int recv = server.ReceiveFrom(data, ref Remote);//接受来自服务器的数据

Console.WriteLine("Message received from{0}:", Remote.ToString());
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
while (true)//读取数据
{
input = Console.ReadLine();//从键盘读取数据
if (input == "text")//结束标记
{
break;
}
server.SendTo(Encoding.ASCII.GetBytes(input), Remote);//将数据发送到指定的终结点Remote
data = new byte[1024];
recv = server.ReceiveFrom(data, ref Remote);//从Remote接受数据
stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine(stringData);
}
Console.WriteLine("Stopping client");
server.Close();
}
}
}



将服务器端①处那行代码注释之后,编译通过,但无法正常发送消息,请问为什么
客户端②处那行不明白干啥的,sendTo应该是将消息发送给指定目的地啊,这不就是发给自己了,但是看运行结果是发送给了服务器端,不明白为什么啊
...全文
330 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdczdccccc 2014-05-21
  • 打赏
  • 举报
回复
引用 8 楼 zdczdcc 的回复:
[quote=引用 5 楼 xdashewan 的回复:] 第一个问题,socket服务端开启监听,首先你客户端需要和服务端建立连接,你先启动服务端的时候客户端未开启,当然无法发送信息 第二个问题,你向IPAddress.Parse("127.0.0.1"), 9050端口发送信息,服务端监听的就是9050端口当然是发送给服务端的
是不是必须服务器send一下,客户端就必须相应的receive一下;我想在控制台两边互相发送消息,不知道为什么实现不了....[/quote] 是不是呀,求解答
zdczdccccc 2014-05-17
  • 打赏
  • 举报
回复
引用 5 楼 xdashewan 的回复:
第一个问题,socket服务端开启监听,首先你客户端需要和服务端建立连接,你先启动服务端的时候客户端未开启,当然无法发送信息 第二个问题,你向IPAddress.Parse("127.0.0.1"), 9050端口发送信息,服务端监听的就是9050端口当然是发送给服务端的
是不是必须服务器send一下,客户端就必须相应的receive一下;我想在控制台两边互相发送消息,不知道为什么实现不了....
zdczdccccc 2014-05-16
  • 打赏
  • 举报
回复
引用 2 楼 zylsky 的回复:
我一开始是双开vs调试.
我也是呀,能帮忙指点下那两个问题么
zylsky 2014-05-16
  • 打赏
  • 举报
回复
我一开始是双开vs调试.
zdczdccccc 2014-05-16
  • 打赏
  • 举报
回复
zjl1985 2014-05-16
  • 打赏
  • 举报
回复
你是不是应该先去了解一下TCP这个概念 再来写
Kation 2014-05-16
  • 打赏
  • 举报
回复
http://www.cnblogs.com/Kation/archive/2013/03/06/2946761.html
xdashewan 2014-05-16
  • 打赏
  • 举报
回复
第一个问题,socket服务端开启监听,首先你客户端需要和服务端建立连接,你先启动服务端的时候客户端未开启,当然无法发送信息 第二个问题,你向IPAddress.Parse("127.0.0.1"), 9050端口发送信息,服务端监听的就是9050端口当然是发送给服务端的

111,097

社区成员

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

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

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