新手学习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应该是将消息发送给指定目的地啊,这不就是发给自己了,但是看运行结果是发送给了服务器端,不明白为什么啊
...全文
248 9 打赏 收藏 转发到动态 举报
写回复
用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端口当然是发送给服务端的
Netty是基于Java NIO的网络应用框架,如果你是Java网络方面的新手,那么本章将是你学习Java网络应用的开始;对于有经验的开发者来说,学习本章内容也是很好的复习。如果你熟悉NIO和NIO2,你可以随时跳过本章直接从第二章开始学习。在你的机器上运行第二章编写的Netty服务器和客户端。         Netty是一个NIO client-server(客户端服务器)框架,使用Netty可以快速开发网络应用,例如服务器和客户端协议。Netty提供了一种新的方式来使开发网络应用程序,这种新的方式使得它很容易使用和有很强的扩展性。Netty的内部实现时很复杂的,但是Netty提供了简单易用的api从网络处理代码中解耦业务逻辑。Netty是完全基于NIO实现的,所以整个Netty都是异步的。    网络应用程序通常需要有较高的可扩展性,无论是Netty还是其他的基于Java NIO的框架,都会提供可扩展性的解决方案。Netty中一个关键组成部分是它的异步特性,本章将讨论同步(阻塞)和异步(非阻塞)的IO来说明为什么使用异步代码来解决扩展性问题以及如何使用异步。         对于那些初学网络变成的读者,本章将帮助您对网络应用的理解,以及Netty是如何实现他们的。它说明了如何使用基本的Java网络API,探讨Java网络API的优点和缺点并阐述Netty是如何解决Java中的问题的,比如Eploo错误或内存泄露问题。         在本章的结尾,你会明白什么是Netty以及Netty提供了什么,你会理解Java NIO和异步处理机制,并通过本书的其他章节加强理解

110,535

社区成员

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

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

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