问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c# socket编程,如何在有路由器的局域网中,连接另一台主机

发布网友 发布时间:2022-05-11 08:19

我来回答

2个回答

热心网友 时间:2023-10-09 08:32

下面是示例程序的简单步骤说明

服务器端:

第一步:用指定的端口号和服务器的ip建立一个EndPoint对像;

第二步:建立一个Socket对像;

第三步:用socket对像的Bind()方法绑定EndPoint;

第四步:用socket对像的Listen()方法开始监听;

第五步:接受到客户端的连接,用socket对像的Accept()方法创建新的socket对像用于和请求的客户端进行通信;

第六步:通信结束后一定记得关闭socket;

代码:

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace server
{
class Program
{
static void Main(string[] args)
{
int port = 2000;
string host = "127.0.0.1";

/**////创建终结点(EndPoint)
IPAddress ip = IPAddress.Parse(host);//把ip地址字符串转换为IPAddress类型的实例
IPEndPoint ipe = new IPEndPoint(ip, port);//用指定的端口和ip初始化IPEndPoint类的新实例

/**////创建socket并开始监听
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个socket对像,如果用udp协议,则要用SocketType.Dgram类型的套接字
s.Bind(ipe);//绑定EndPoint对像(2000端口和ip地址)
s.Listen(0);//开始监听
Console.WriteLine("等待客户端连接");

/**////接受到client连接,为此连接建立新的socket,并接受信息
Socket temp = s.Accept();//为新建连接创建新的socket
Console.WriteLine("建立连接");
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);

/**////给client端返回信息
Console.WriteLine("server get message:{0}", recvStr);//把客户端传来的信息显示出来
string sendStr = "ok!Client send message successful!";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
temp.Send(bs, bs.Length, 0);//返回信息给客户端
temp.Close();
s.Close();
Console.ReadLine();
}

}
}

客户端:

第一步:用指定的端口号和服务器的ip建立一个EndPoint对像;

第二步:建立一个Socket对像;

第三步:用socket对像的Connect()方法以上面建立的EndPoint对像做为参数,向服务器发出连接请求;

第四步:如果连接成功,就用socket对像的Send()方法向服务器发送信息;

第五步:用socket对像的Receive()方法接受服务器发来的信息 ;

第六步:通信结束后一定记得关闭socket;

代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace Client
{
class Program
{
static void Main(string[] args)
{
try
{
int port = 2000;
string host = "127.0.0.1";
/**////创建终结点EndPoint
IPAddress ip = IPAddress.Parse(host);
//IPAddress ipp = new IPAddress("127.0.0.1");
IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndpoint实例

/**////创建socket并连接到服务器
Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建Socket
Console.WriteLine("Conneting…");
c.Connect(ipe);//连接到服务器

/**////向服务器发送信息
string sendStr = "hello!This is a socket test";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);//把字符串编码为字节
Console.WriteLine("Send Message");
c.Send(bs, bs.Length, 0);//发送信息

/**////接受从服务器返回的信息
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
Console.WriteLine("client get message:{0}", recvStr);//显示服务器返回信息
/**////一定记着用完socket后要关闭
c.Close();
}
catch (ArgumentNullException e)
{
Console.WriteLine("argumentNullException: {0}", e);
}
catch (SocketException e)
{
Console.WriteLine("SocketException:{0}", e);
}
Console.WriteLine("Press Enter to Exit");
}
}
}

热心网友 时间:2023-10-09 08:32

局域网中,如果两台主机都处于同一个路由器之下,则可以直接连,因为并不涉及NAT,就跟同一个网段中那样,剩下的工作路由器和交换机会替你完成.
如果两个主机处于不同的路由器之下(也就是某个主机所在网络是子网,或分别位于两个路由器之下),则不可以直接连.
假定A和B是两个主机.C和D是路由器.A连在C上,D连在C上,B在D下面,也就是B所处网络是A所处网络的子网,则B可以直接连接A,反之则不行.这时可以在路由器D上设置端口映射,这样就能直接互相访问了.
如果分别位于两个路由器下,就需要在两个路由器上都设置端口映射,才能互联(谁发起连接都行),否则就只能依靠打洞了.详细的资料请搜索TCP打洞.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...女孩 姓陆 2011年11月26号03点24分 出生 五行缺水火 望高人帮忙起名... 女孩,姓陆,2010.农历05.19下午13.25分出生。五行不缺。请各位大虾取个... 2013年女孩3月9号11点43姓陆女孩取什么名字 2012年11月11日上午5点左右出生的女孩五行缺什么,姓陆,取什么名好 女孩2013年4月4日清明节晚上二十三点半左右出生想知道五行缺?啥取什... 公对公汇款需要什么资料 在微信附近的人里面我点击了清除位置并退出的按钮这样别人在附近的人... 13点128保留整数是多少 128乘以72怎么估算 按要求把下面各数省略万位(或亿位)后面的尾数,求出近似数.1284639... Socket只能在局域网内通信吗 socket在两个局域网之间怎样通讯?拜托了各位 谢谢 由路由器连接的电脑如何socket实现网络通信 两个不同网段的内网IP 怎么socket通信 怎么进行不同网段的SOCKET通信 如何运用socket网络编程实现上位机和下位机之间通过wifi进行通信 局域网主机如何通过socket访问外网服务器? Socket通信,向局域网内的所有机器发送一个广播,然后接受这些机器给我回发的包。100分求解。 怎么用socket使不同局域网的两台具有相同IP的主机通信 Java中Socket连接是不是只能局域网内通信 Socket通信是不是只能在局域网中用? socket 在两个局域网如何通讯 、? 只能听清*部分是你说你说啥啥啥的,歌词像是古风的,是男的唱的, 歌词 你说什么?你还爱我? 这是什么歌曲?名字叫什么 歌词里有 你说什么什么的 是你不曾有的体会,什么什么有伤悲 歌词里有一句今晚你说什么我都愿意就是别跟我谈感情这首歌名叫什么 有首歌歌词是你说什么什么的我们的爱做纪念 - 信息提示 男:你说什么?别开玩笑了.女:我没有开玩笑,我是认真的.歌词是哪首歌名 高潮是 你说什么什么自作自受自己伤悲的歌是什么 java中Socket通信问题:Socket通信是不是只能在局域网中用? 局域网跨网段socket通信问题,急需解答,求大神啊!!! java socket 如何实现局域网内的通信的 关于socket,同一个wifi,为什么电脑局域网能通信 如何在VB.NET中用Socket类实现局域网中的通信问题 局域网之间的socket通讯该如何完成 怎么查看QQ号里好友是什么时候添加的? 请问怎么样查看自己的QQ好友是否也加了自己? 为什么别人WORD文档放在我的电脑里字体就变得大小不一了?怎么解决? 网页制作中的css样式怎样单独兼容火狐? 求二级建造师(机电工程)教材的电子书,注册安全师教材的电子书,当然资料越详细越好! 必有重谢 +50分! 请问:哪个大哥有《注册核安全工程师岗位培训丛书》四本电子版啊? iOS8.3的AppleWatch应用怎么进入?要开发者账号吗 applewatch如何解锁mac iPhone 6s升级到IOS9.3.5怎么样?好用吗?界面有什么变化吗? iphone6plus升级ios8.2怎么样 OS9 Beta2有哪些BUG? 清炖白萝卜的做法有哪些? 索尼电视kD一55X8500G能用户户通机顶盒免费看*台和各省卫星台的电视吗?_百度问一问 kd-55x8500c开不机红绿灯闪