两个无线路由器连接
步骤:
1、登入340G 设置网络参数--LAN口 IP地址为:19216855
2、设置WAN 口 接入互联网形式。
3、设置无线参数。开启Bridge功能,其中的MAC地址是另一台 641G无线路由的MAC地址。同相的,另一台641G的同样位置也添上指示340G的MAC地址。 <wbr></wbr>(注:获取的是LAN口的MAC地址,可以在无线参数里面的主机状态里面查询);频段与另一路由要一致,推荐1、6、11段;开启SSID广播。
4、密码设置。如果开启,安全类型、密钥格式、密码全部要一致。
5、关闭DHCP服务器。
6、另一台641G路由器:LAN IP地址
7、其他 SSID号:一定要与340G一样。MAC地址与641G互换。
8、电脑端。连接640G(也就是第二台路由的帐号)。网关用19216855 (写340G路由的LAN口IP地址) 。被桥接的641G 的LAN口上可以接网线带其他的电脑。可以,内网之间实现TCP通讯需要用到内网穿透技术。
以下是示例代码。
服务端代码:
static void Main(string[] args)
{
int port = 555;
IPEndPoint ipe = new IPEndPoint(IPAddressAny, port);
Socket sSocket = new Socket(AddressFamilyInterNetwork, SocketTypeStream, ProtocolTypeTcp);
sSocketBind(ipe);
sSocketListen(100);
ConsoleWriteLine("监听已经打开,请等待");
while (true)
{
Socket serverSocket1 = sSocketAccept();
ConsoleWriteLine("连接已经建立");
string recStr = "";
byte[] recByte = new byte[4096];
int bytes = serverSocket1Receive(recByte);
IPEndPoint ep1 = (IPEndPoint)serverSocket1RemoteEndPoint;
ConsoleWriteLine(" from {0}", ep1ToString());
recStr = EncodingASCIIGetString(recByte, 0, bytes);
ConsoleWriteLine("客户端1:{0}", recStr);
Socket serverSocket2 = sSocketAccept();
bytes = serverSocket2Receive(recByte);
IPEndPoint ep2 = (IPEndPoint)serverSocket2RemoteEndPoint;
ConsoleWriteLine(" from {0}", ep2ToString());
recStr = EncodingASCIIGetString(recByte, 0, bytes);
ConsoleWriteLine("客户端2:{0}", recStr);
byte[] sendByte =EncodingASCIIGetBytes(ep1ToString() + ":" + ep2ToString());
serverSocket1Send(sendByte, sendByteLength, 0);
sendByte = EncodingASCIIGetBytes(ep2ToString() + ":" + ep1ToString());
serverSocket2Send(sendByte, sendByteLength, 0);
serverSocket1Close();
serverSocket2Close();
}
}
功能:两边客户端连接服务器后将映射的外网IP和端口号传给双方。
客户端代码
static void Main(string[] args)
{
string host = "11521XX";//服务端IP地址
int port = 555;
Socket clientSocket = new Socket(AddressFamilyInterNetwork, SocketTypeStream, ProtocolTypeTcp);
//设置端口可复用
clientSocketSetSocketOption(SocketOptionLevelSocket, SocketOptionNameReuseAddress, true);
//连接服务端
clientSocketConnect(host, port);
ConsoleWriteLine("Connect:" + host + " " + port);
string data = "hello,Server!";
clientSocketSend(EncodingASCIIGetBytes(data));
ConsoleWriteLine("Send:" + data);
byte[] recBytes = new byte[100];
//获取到双方的ip及端口号
int bytes = clientSocketReceive(recBytes, recBytesLength, 0);
string result = EncodingASCIIGetString(recBytes, 0, bytes);
ConsoleWriteLine("Recv:" +result);
clientSocketClose();
string[] ips = resultSplit(':');
int myPort = ConvertToInt32(ips[1]);
string otherIp = ips[2];
int otherPort = ConvertToInt32(ips[3]);
Socket mySocket = new Socket(AddressFamilyInterNetwork, SocketTypeStream, ProtocolTypeTcp);
mySocketSetSocketOption(SocketOptionLevelSocket, SocketOptionNameReuseAddress, true);
//绑定到之前连通过的端口号
IPEndPoint ipe = new IPEndPoint(IPAddressAny, ConvertToInt32(myPort));
mySocketBind(ipe);
//尝试5次连接
for (int j = 0; j < 5; j++)
{
try
{
mySocketConnect(otherIp, otherPort);
ConsoleWriteLine("Connect:成功{0},{1}", otherIp,otherPort);
break;
}
catch (Exception)
{
ConsoleWriteLine("Connect:失败");
// otherPort++;//如果是对称NAT,则有可能客户端的端口号已经改变,正常有规律的应该是顺序加1,可以尝试+1再试(我使用手机热点连接的时候端口号就变成+1的了)除非是碰到随机端口,那就不行了。
}
}
while (true)
{
mySocketSend(EncodingASCIIGetBytes("hello,the other client!"));
byte[] recv = new byte[4096];
int len = mySocketReceive(recv, recvLength, 0);
result = EncodingASCIIGetString(recv, 0, len);
ConsoleWriteLine("recv :" + result);
ThreadSleep(1000);
}
}
另一边客户端也一样。连接服务器后,可以绑定之前的端口号复用,但如果碰到一端是对称NAT时每次使用端口号会不一样时,这样就得通过预测下次可能使用的端口号来连通。如:使用手机热点网络连接服务器时,获取到它使用的端口号是56324,等到下一次客户端互相连接使用56325才连上。服务器硬盘的接口与普通电脑不一样。
以前普通的是IDE,服务器是SCSI,接口大小都不一样。
现在普通的是SATA,服务器是SAS,接口有点像,实际上也能混插,数据线也可以通用,但是由于普通电脑不能管理SAS硬盘,所以也不能用。
但是,如果你确实有这样的硬盘,也想用或者必须用,那么你可以去买一张转接卡,插在电脑主板上就可以用服务器硬盘了,但之前你必须弄明白,你的硬盘是SCSI的,还是SAS的,然后买对应的卡,比如SAS,你直接去淘宝搜SAS卡就可以了,一般低档的这个卡可以接两块硬盘,价格也不太贵。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)