黑马程序员技术交流社区
标题:
如何实现两个不同的内网进行通信?
[打印本页]
作者:
曾家伟
时间:
2012-10-13 10:15
标题:
如何实现两个不同的内网进行通信?
比如说,我的电脑是用adsl拨号上网,有一个内网IP和一个动态的IP,对方的电脑和我的一样,我的电脑做为服务端,对方的为客户端,请问怎么实现两台电脑进行通信?要涉及到打洞吗?
作者:
郭会茹
时间:
2012-10-13 10:23
不知道你说的是不是共享?{:soso_e143:}
网上查的,不过就是这样,希望可以帮到你!
=========================================
1.首先确定两台机子的“Server服务”时开启的,这个可以在 我的电脑-管理-服务与应用程序里面的服务就可以看到,如果没开启的话就将其开启;
2.套用下一位回答者的内容,先确定两台机子在同一个工作组里,跟着各自设置两台机子的IP地址,可设置为192.168.1.1~192.168.1.255之间其中一个,记住,两台机子不能设置成同一个IP,网关的话就默认的255.255.255.0就可以了,你点击网关时它会自动生成,不用你自己输入;
3.这步就要看你自己了,在那台要设置共享的电脑里面建一个文件夹来作为共享使用(最好别建在系统盘,可能会因为权限问题无法访问),跟着右击文件夹,有个 共享和安全,打开选择 共享 选项-选择共享此文件夹 就行了,有时可能因为系统或设置的问题,右键没有此选项,这时可打开 我的电脑-工具-文件夹选项-查看 将里面的简单文件夹共享勾掉就行了,这时右键就有刚刚的选项了。
好了,准备工作完成了,接下来就是准备一条可以用的网线,连接两台电脑,这时访问共享文件的那台电脑的IP就行了...
作者:
李辰东
时间:
2012-10-13 12:46
本帖最后由 李辰东 于 2012-10-13 12:56 编辑
郭会茹 发表于 2012-10-13 10:23
不知道你说的是不是共享?
网上查的,不过就是这样,希望可以帮到你!
====================== ...
lz的問題有點不清楚啊,我覺得他問的應該不是這個意思
如果lz使用adsl撥號上網(用的是Modem,而不是路由器的話),那麽是登入了廣域網(www),
這樣跟你的局域網就扯不上關係了
在.net framework的類庫(Class Library)中,提供了兩個用于TCP網絡通訊的類
分別是TcpClient和TcpListener
TcpClient類是基于TCP協議的客戶端類,
而TcpListener是服務器端,監聽(Listen)客戶端傳來的連接請求
TcpClient類通過TCP協議與服務器進行通訊並獲取信息,它的內部封裝了一個Socket類的實例
這個Socket對象被用來使用TCP協議向服務器請求和獲取數據
因爲與遠程主機的交互是以數據流的形式出現的
所以傳輸的數據可以使用.net framework中流處理技術讀寫
例如:
建立一個時間服務器,
包括服務器端程序和客戶端程序
服務器端監聽客戶端的連接請求,建立連接以後向客戶端發送當前的系統時間。
過程:先運行服務器端程序
然後運行客戶端程序
客戶端首先發送連接請求到服務器端
服務器端回應後發送當前時間到客戶端
發送完成後,服務器端繼續等待下一次連接的請求
通過這個例子來了解TcpClient類的基本用法
要使用這個類,必須使用System.Net.Socket命名空間
下面來講解一下簡單的客戶端程序:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
namespace TcpClientExample
{
public class TcpTimeClient
{
private const int portNum = 13;//服務器端口,可以自己設置,最好不要跟常用的80、21那些端口衝突
private const string hostName = "127.0.0.1";//服務器地址,127.0.0.1為本機
//除了指向固定的Ip,如果是動態IP的話,可以通過一個固定的域名地址來
//存放IP,譬如:http://xxx.com/ip.txt
//然後ip每次改變的時候手動或自動修改此文件
[STAThread]
static void Main(string[] args)
{
try
{
Console.Write("Try to connect to " + hostName + ":" + portNum.ToString() + "\r\n");
TcpClient client = new TcpClient(hostName, portNum); //我們必須初始化一個TcpClient類的實例
NetworkStream ns = client.GetStream();//使用TcpClient類的GetStream()方法獲取數據流
//注意,當使用主機名和端口號初始化TcpClient類的實例時
//直到跟服務器建立了連接,這個實例才算真正建立,程序才能往下執行。
//如果因爲網絡不通,服務器不存在,服務器端口未開放等等原因而不能連接,
//程序將抛出異常並且中斷執行
//建立數據流之後,我們可以使用NetworkStream類的Read()方法從流中讀取數據,
//使用Write()方法向流中寫入數據。讀取數據時,
//首先應該建立壹個緩沖區,具體的說,就是建立壹個byte型的數組用來存放從流中讀取的數據。
//Read()方法的原型描述如下:
//public override int Read(in byte[] buffer,int offset,int size)
//buffer是緩沖數組,offset是數據(字節流)在緩沖數組中存放的開始位置,
//size是讀取的字節數目,返回值是讀取的字節數
byte[] bytes = new byte[1024]; //建立緩衝區
int bytesRead = ns.Read(bytes, 0, bytes.Length); //讀取字節流
Console.WriteLine(Encoding.ASCII.GetString(bytes, 0, bytesRead));
client.Close();//關閉連接
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
Console.ReadKey();
}
}
}
复制代码
下面來看如何建立服務器程序
這個例子將使用TcpListener類,在13號端口監聽
一旦有客戶端連接,將立即向客戶端發送當前服務器的時間信息
TcpListener的關鍵在于AcceptTcpClient()方法
該方法將檢測端口是否有未處理的連接請求
如果有未處理的連接請求,該方法將使服務器同客戶端建立連接,
並且返回壹個TcpClient對象,
通過這個對象的GetStream方法建立同客戶端通訊的數據流。
此外,TcpListener類提供Start()方法開始監聽,提供Stop()方法停止監聽。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
namespace TimeServer
{
class TimeServer
{
private const int portNum = 13; //監聽的端口
[STAThread]
static void Main(string[] args)
{
bool done = false;
TcpListener listener = new TcpListener(portNum);//使用端口初始化一個TcpListene實例
listener.Start();//開始監聽
while (!done)
{
//如果有未處理的連接請求,使用AcceptTcpClient方法進行處理,並且獲取數據流
Console.Write("等待連接中...");
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine("接受连接.");
NetworkStream ns = client.GetStream();
//獲取本機時間,並保存在字節數組中,使用NetworkStream.Write()方法寫入數據流
//然後客戶端就可以通過Read()方法從數據流中獲取這段信息
byte[] byteTime = Encoding.ASCII.GetBytes(DateTime.Now.ToString());
try
{
ns.Write(byteTime, 0, byteTime.Length);
//關閉數據流和連接
ns.Close();
client.Close();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
listener.Stop();
}
}
}
<font color="red">整理這麽長,多+分麽?</font>
复制代码
好了,至於其他連接上后你要做什麽就自由發揮了
作者:
徐赵华
时间:
2012-10-14 01:20
你用一个交换机,将你的电脑和另一台电脑插入交换机上面.adsl线路也插进交换机上面,这样你也可以adsl拔号上号。又可以和另一台电脑通信。但你们的IP地址要在同一网段内才能通信,这个自己设置就可以了。
作者:
管真
时间:
2012-10-17 13:02
Windows网上邻居互访的基本条件:
1) 双方计算机打开,且设置了网络共享资源;
2) 双方的计算机添加了 "Microsoft 网络文件和打印共享" 服务;
3) 双方都正确设置了网内IP地址,且必须在一个网段中;
4) 双方的计算机中都关闭了防火墙,或者防火墙策略中没有阻止网上邻居访问的策略。
Windows 98/2000/XP/2003访问XP的用户验证问题
首先关于启用Guest为什么不能访问的问题:
1、默认情况下,XP 禁用Guest帐户
2、默认情况下,XP的本地安全策略禁止Guest用户从网络访问
3、默认情况下,XP的 本地安全策略 -> 安全选项里,"帐户:使用空密码用户只能进行控制台登陆"是启用的,也就是说,空密码的任何帐户都不能从网络访问只能本地登陆,Guest默认空密码......
所以,如果需要使用Guest用户访问XP的话,要进行上面的三个设置:启用Guest、修改安全策略允许Guest从网络访问、禁用3里面的安全策略或者给Guest加个密码。
有时还会遇到另外一种情况:访问XP的时候,登录对话框中的用户名是灰的,始终是Guest用户,不能输入别的用户帐号。
原因是这个安全策略在作怪(管理工具 -> 本地安全策略 -> 安全选项 -> "网络访问:本地帐户的共享和安全模式")。默认情况下,XP的访问方式是"仅来宾"的方式,那么你访问它,当然就固定为Guest不能输入其他用户帐号了。
所以,访问XP最简单的方法就是:不用启用Guest,仅修改上面的安全策略为"经典"就行了。别的系统访问XP就可以自己输入帐户信息。
至于访问2003,默认情况下2003禁用Guest,但是没有 XP 那个讨厌的默认自相矛盾的来宾方式共享,所以可以直接输入用户名密码访问。
一个小型办公局域网,都是winxp系统,都能上外网,也能看到对方计算机,却不能看到对方共享的计算机提示网络路径不正确,或你没有权限使用网络大概就是这个意思我记的不太清楚!!来宾帐户我也启用了!winxp的防火墙也是关闭的,ip地址也没什么问题!!希望大家给分析一下!!非常感谢!
原因:Win2000/XP中存在安全策略限制。
有时,Win2000/XP"聪明"过了头,虽然我们已经启用了Guest账户,从Win98中却仍然无法访问Win2000/XP,比如使用了类似瑞星等的防火墙漏洞修补,它会修改"拒绝从网络访问这台计算机"的策略,按下面的方法修改回来:
开始 -> 运行 -> gpedit.msc -> 计算机配置 -> windows设置 -> 本地策略 -> 用户权利分配 -> 删除"拒绝从网络访问这台计算机"中的guest用户。
Win2000/XP与Win98互访
如果两台电脑都使用Win2000/XP操作系统,那么组建局域网是一件非常简单轻松的事情,当硬件连接完成后,正常情况下立即可以在"网上邻居"中看到对方。但如果局域网中有一台电脑使用Win98,那情况可就不一定了,我们经常会发觉虽然Ping命令可以通过,但仍然无法在"网上邻居"中实现互访,这时该怎么办呢?
对策一:在Win2000/XP中启用Guest用户。在Win2000/XP系统安装之后会缺省建立两个用户账户,即 Administrator(系统管理员)和Guest(来宾账户),所有在本地计算机没有被分配到账户的用户都将默认使用Guest账户,该账户是没有密码的。不过,在缺省设置下,这个Guest账户并未被启用,我们可以从"控制面板|管理工具|计算机管理|本地用户和组|用户"中找到"Guest"账户,并用鼠标右击打开"Guest属性"对话框,去除这里的"账户已停用"复选框上的对钩标记,这样退出后就可以从Win98中访问到 Win2000/XP了。
其实,启用了Guest账户后,最大的好处是从Win98访问Win2000/XP时就不需要输入用户名和密码了,这种方法比较适合于用户不确定、访问量较大的局域网,但对家庭用户来说并不适用。
-------------------------------------------------------------------
对策二:检查Win2000/XP中是否存在安全策略限制。有时,Win2000/XP"聪明"过了头,虽然我们已经启用了Guest账户,从Win98中却仍然无法访问Win2000/XP,这时就要从"控制面板|管理工具|本地安全策略|本地策略|用户权利指派"中找到"从网络访问此计算机"或者"拒绝从网络访问这台计算机",然后检查一下其中是否出现了Guest账户或者其他对应的账户,然后根据不同情况进行添加或者删除即可。
-------------------------------------------------------------------
对策三:停用本地连接上的防火墙。防火墙是充当网络与外部世界之间的保卫边界的安全系统,微软在WinXP中为用户提供了一个内置的Internet连接防火墙(ICF),启用后可以限制某些不安全信息从外部进入内部网络。不过,如果您是在本地连接上启用了这个防火墙,那么就会造成工作组之间无法互访,出现 "XXX无法访问"、"您可能没有权限使用网络资源"、"请与这台服务器的管理员联系以查明您是否有访问权限"、"找不到网络路径"等类似的提示,此时请停用本地连接的防火墙屏蔽。
-------------------------------------------------------------------
对策四:为WinXP添加NetBEUI协议。其实,直接添加NetBEUI协议对于解决不能互访的问题有时反而更为简单一些,而且它可以解决上面提到的启用防火墙的问题。Win98安装时会自动安装NetBEUI协议,但由于WinXP已经不再提供对NetBEUI协议的技术支持,因此只能手工添加了。
找出WinXP安装光盘,进入"valueadd\Msft\Net\Netbeui"文件夹下,这里有Nbf.sys、Netbeui.txt、 Netnbf.inf共3个文件,先将Nbf.sys文件复制到本机的"Windows\System32\Drivers"文件夹下(这里的本机指安装了WinXP的那台电脑),再将Netnbf.inf文件复制到本机的"Windows\INF"文件夹下,Netbeui.txt文件可有可无。不过, INF文件夹具有隐藏属性,用户需要先在WinXP下的"工具|属性"窗口中选择显示文件才可以看到该目录。
-------------------------------------------------------------------
对策五:启用Win98中的"文件及打印机共享"。这是一个很简单但却经常被人忽略的问题,就是装有Win2000/XP的机器虽然可以从"网上邻居"中发现装有Win98的机器,但却无法访问,这是因为Win98未启用"允许其他用户访问我的文件"而造成的,启用该选项就可以解决这个问题。
当然,除了上面提到的各种原因外,还有两台电脑不处于同一工作组中,或者是两台电脑的内部IP地址发生了冲突,甚至包括Hub故障、线路故障等。
微软知识库文章,Microsoft Knowledge Base Article - 318030
无法访问共享文件和文件夹或者浏览工作组中的计算机
http://support.microsoft.com/default.aspx?scid=kb;cn;318030
3) 双方都正确设置了网内IP地址,且必须在一个网段中;
^^^^^^^^^^^^^^^^^^
这个不一定,因为名称解析问题可以用WINS服务解决
作者:
颜晋南
时间:
2012-10-18 21:20
有软件实现虚拟局域网的,应该叫VLAN。记得一些经典的游戏如:实况,NBA,极品飞车可以用这个平台上去和其他的玩家对战,用这个软件也就虚拟了局域网,通过共享就能互相访问文件了。
第二种:架设FTP。通过FTP访问。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2