C#网络监听

edisonlzk 2007-11-10 06:42:28
using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;

namespace NetLsn
{
class Program
{
private static bool check = true;
//private static string ip;
//private static string port;
private static IPAddress ip;

static void Main(string[] args)
{
/*Console.WriteLine("Please enter a IP address:");
ip = Console.ReadLine();
Console.WriteLine("enter a port");
port = Console.ReadLine();*/

ip = IPAddress.Parse("127.0.0.1");

Thread thread = new Thread(new ThreadStart(acc));
thread.Start();
}

private static void acc()
{
//IPEndPoint server = new IPEndPoint(ip,Int32.Parse(port));
IPEndPoint server = new IPEndPoint(ip,3257);
Socket socket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
socket.Bind(server);
socket.Listen(50);

Socket accSock = socket.Accept();

if (accSock.Connected)
{
Console.WriteLine("eatablished successfully");
while(check)
{
byte[] rec = new byte[64];
NetworkStream ns = new NetworkStream(accSock);
ns.Read(rec,0,rec.Length);
string recmsg = System.Text.Encoding.BigEndianUnicode.GetString(rec);
Console.WriteLine(recmsg);
}
}
else
{
Console.WriteLine("eatablished unsuccessfully");
}
}
}

}




为什么没有返回消息啊,运行之后,就出现假死的情况
...全文
784 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
boblaw 2007-11-12
  • 打赏
  • 举报
回复
使用非阻塞方式.
或者你可以寫一個線程來執行偵聽,而不要放在主線程中.這樣就不會沒有反應了
linsoo 2007-11-12
  • 打赏
  • 举报
回复
写一个ping程序,把所有可能IP都ping一遍是最笨的办法
edisonlzk 2007-11-12
  • 打赏
  • 举报
回复
请问一下还有什么方法可以得到局域网内的所有IP呢?
edisonlzk 2007-11-12
  • 打赏
  • 举报
回复
请问一下10楼的.
如果不用阻塞方式,那还有什么别的方法没有,如果没有客户端连接,就自动退出
boblaw 2007-11-12
  • 打赏
  • 举报
回复
網上查下資料吧,內容太多,不是三言兩語可以說清楚的
edisonlzk 2007-11-12
  • 打赏
  • 举报
回复
请问一下14楼的.
非阻塞方式的方法是什么?
ccjjxx001 2007-11-11
  • 打赏
  • 举报
回复
楼主要显示什么消息呢?如果想要显示监听到的消息,需要自己再写一个客户端,发送消息给监听程序。
boblaw 2007-11-11
  • 打赏
  • 举报
回复
为什么没有返回消息啊,运行之后,就出现假死的情况
----------------------------------------
Socket accSock = socket.Accept();
用的是阻塞方式吧,没有客户端连接,就会一直等下去,当然会假死了
ccjjxx001 2007-11-11
  • 打赏
  • 举报
回复
也不行。如果你QQ运行了的话,它的端口已经被占用了,由于一个端口只能被一个套接字使用,
你不能将套接字绑定在那个端口上,就无法监听。
如果你没有运行QQ,那服务器是不知道,你的IP和端口号,是不会有消息向你的IP地址发送的,
当然你可以编程向服务器登陆,那就相当于编了一个自己的QQ客户端了。
edisonlzk 2007-11-11
  • 打赏
  • 举报
回复
但是如果我把监听的端口设为QQ使用的端口,能监听到消息不?
ccjjxx001 2007-11-11
  • 打赏
  • 举报
回复
正解 这段代码:
ns.Read(rec,0,rec.Length);//从监听端口接收到数据
string recmsg = System.Text.Encoding.BigEndianUnicode.GetString(rec);//转换为字符串
Console.WriteLine(recmsg);//显示

如果没有程序向你监听的端口发送数据,自然没有可以显示的东西。所以需要你在写一个客户端,向监听端口发送数据。
edisonlzk 2007-11-11
  • 打赏
  • 举报
回复
不太明白5楼的意思.
你意思是说我这个程序只是一个server,还需要一个client么?
if (accSock.Connected)
{
Console.WriteLine("eatablished successfully");
while(check)
{
byte[] rec = new byte[64];
NetworkStream ns = new NetworkStream(accSock);
ns.Read(rec,0,rec.Length);
string recmsg = System.Text.Encoding.BigEndianUnicode.GetString(rec);
Console.WriteLine(recmsg);
}
}


Console.WriteLine(recmsg); 我这条语句不能输出消息么
edisonlzk 2007-11-10
  • 打赏
  • 举报
回复
我要怎么才能让他显示出消息呢.
我还是没有明白.
None465465535 2007-11-10
  • 打赏
  • 举报
回复
   //IPEndPoint server = new IPEndPoint(ip,Int32.Parse(port));
IPEndPoint server = new IPEndPoint(ip,3257);
Socket socket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
socket.Bind(server);
socket.Listen(50);

Socket accSock = socket.Accept();

if (accSock.Connected)
{
Console.WriteLine("eatablished successfully");
while(true)
{
byte[] rec = new byte[64];
NetworkStream ns = new NetworkStream(accSock);
ns.Read(rec,0,rec.Length);
string recmsg = System.Text.Encoding.BigEndianUnicode.GetString(rec);
Console.WriteLine(recmsg);
}
}
else
{
Console.WriteLine("eatablished unsuccessfully");
}
jiejie526 2007-11-10
  • 打赏
  • 举报
回复
using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;

namespace NetLsn
{
class Program
{
private static bool check = true;
//private static string ip;
//private static string port;
private static IPAddress ip;

static void Main(string[] args)
{
/*Console.WriteLine("Please enter a IP address:");
ip = Console.ReadLine();
Console.WriteLine("enter a port");
port = Console.ReadLine();*/

ip = IPAddress.Parse("192.168.0.6");

Thread thread = new Thread(new ThreadStart(acc));
thread.Start();
}
/// <summary>
///
/// </summary>
private static void acc()
{
//IPEndPoint server = new IPEndPoint(ip,Int32.Parse(port));
//用指定的地址还端口号初使化System.Net.IPEndPoint类的新实例
//IPEndPoint将网络端点表示为IP地址和端口号
IPEndPoint server = new IPEndPoint(ip, 3257);
Socket socket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
socket.Bind(server);
socket.Listen(50);

Socket accSock = socket.Accept();

if (accSock.Connected)
{
Console.WriteLine("eatablished successfully");
while (check)
{
byte[] rec = new byte[64];
NetworkStream ns = new NetworkStream(accSock);
ns.Read(rec, 0, rec.Length);
string recmsg = System.Text.Encoding.BigEndianUnicode.GetString(rec);
Console.WriteLine(recmsg);
}
}
else
{
Console.WriteLine("eatablished unsuccessfully");
}
}
}

}
jiejie526 2007-11-10
  • 打赏
  • 举报
回复
你没有让他显示什么消息啊,最好是界面的,控制台的不方便看啦

110,571

社区成员

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

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

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