A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曾家伟 中级黑马   /  2012-10-13 10:15  /  5970 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

比如说,我的电脑是用adsl拨号上网,有一个内网IP和一个动态的IP,对方的电脑和我的一样,我的电脑做为服务端,对方的为客户端,请问怎么实现两台电脑进行通信?要涉及到打洞吗?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

5 个回复

倒序浏览
不知道你说的是不是共享?{:soso_e143:}
网上查的,不过就是这样,希望可以帮到你!
=========================================
1.首先确定两台机子的“Server服务”时开启的,这个可以在 我的电脑-管理-服务与应用程序里面的服务就可以看到,如果没开启的话就将其开启;
2.套用下一位回答者的内容,先确定两台机子在同一个工作组里,跟着各自设置两台机子的IP地址,可设置为192.168.1.1~192.168.1.255之间其中一个,记住,两台机子不能设置成同一个IP,网关的话就默认的255.255.255.0就可以了,你点击网关时它会自动生成,不用你自己输入;
3.这步就要看你自己了,在那台要设置共享的电脑里面建一个文件夹来作为共享使用(最好别建在系统盘,可能会因为权限问题无法访问),跟着右击文件夹,有个 共享和安全,打开选择 共享 选项-选择共享此文件夹 就行了,有时可能因为系统或设置的问题,右键没有此选项,这时可打开 我的电脑-工具-文件夹选项-查看 将里面的简单文件夹共享勾掉就行了,这时右键就有刚刚的选项了。

好了,准备工作完成了,接下来就是准备一条可以用的网线,连接两台电脑,这时访问共享文件的那台电脑的IP就行了...

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 李辰东 于 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命名空間

下面來講解一下簡單的客戶端程序:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Net.Sockets;


  7. namespace TcpClientExample
  8. {
  9.     public class TcpTimeClient
  10.     {
  11.         private const int portNum = 13;//服務器端口,可以自己設置,最好不要跟常用的80、21那些端口衝突
  12.         private const string hostName = "127.0.0.1";//服務器地址,127.0.0.1為本機
  13.         //除了指向固定的Ip,如果是動態IP的話,可以通過一個固定的域名地址來
  14.         //存放IP,譬如:http://xxx.com/ip.txt   
  15.         //然後ip每次改變的時候手動或自動修改此文件

  16.         [STAThread]
  17.         static void Main(string[] args)
  18.         {
  19.             try
  20.             {
  21.                 Console.Write("Try to connect to " + hostName + ":" + portNum.ToString() + "\r\n");
  22.                 TcpClient client = new TcpClient(hostName, portNum);  //我們必須初始化一個TcpClient類的實例
  23.                 NetworkStream ns = client.GetStream();//使用TcpClient類的GetStream()方法獲取數據流
  24.                
  25.                 //注意,當使用主機名和端口號初始化TcpClient類的實例時
  26.                 //直到跟服務器建立了連接,這個實例才算真正建立,程序才能往下執行。
  27.                 //如果因爲網絡不通,服務器不存在,服務器端口未開放等等原因而不能連接,
  28.                 //程序將抛出異常並且中斷執行

  29.                 //建立數據流之後,我們可以使用NetworkStream類的Read()方法從流中讀取數據,
  30.                 //使用Write()方法向流中寫入數據。讀取數據時,
  31.                 //首先應該建立壹個緩沖區,具體的說,就是建立壹個byte型的數組用來存放從流中讀取的數據。
  32.                 //Read()方法的原型描述如下:
  33.                 //public override int Read(in byte[] buffer,int offset,int size)

  34.                 //buffer是緩沖數組,offset是數據(字節流)在緩沖數組中存放的開始位置,
  35.                 //size是讀取的字節數目,返回值是讀取的字節數

  36.                 byte[] bytes = new byte[1024];   //建立緩衝區
  37.                 int bytesRead = ns.Read(bytes, 0, bytes.Length); //讀取字節流

  38.                 Console.WriteLine(Encoding.ASCII.GetString(bytes, 0, bytesRead));

  39.                 client.Close();//關閉連接





  40.             }
  41.             catch (Exception e)
  42.             {
  43.                 Console.WriteLine(e.ToString());
  44.             }
  45.             Console.ReadKey();
  46.         }
  47.     }
  48. }



复制代码
下面來看如何建立服務器程序
這個例子將使用TcpListener類,在13號端口監聽
一旦有客戶端連接,將立即向客戶端發送當前服務器的時間信息

TcpListener的關鍵在于AcceptTcpClient()方法
該方法將檢測端口是否有未處理的連接請求
如果有未處理的連接請求,該方法將使服務器同客戶端建立連接,
並且返回壹個TcpClient對象,
通過這個對象的GetStream方法建立同客戶端通訊的數據流。
此外,TcpListener類提供Start()方法開始監聽,提供Stop()方法停止監聽。
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Net.Sockets;


  7. namespace TimeServer
  8. {
  9.     class TimeServer
  10.     {
  11.         private const int portNum = 13;   //監聽的端口

  12.         [STAThread]
  13.         static void Main(string[] args)
  14.         {
  15.             bool done = false;
  16.             TcpListener listener = new TcpListener(portNum);//使用端口初始化一個TcpListene實例
  17.             listener.Start();//開始監聽
  18.             while (!done)
  19.             {
  20.                 //如果有未處理的連接請求,使用AcceptTcpClient方法進行處理,並且獲取數據流
  21.                 Console.Write("等待連接中...");
  22.                 TcpClient client = listener.AcceptTcpClient();

  23.                 Console.WriteLine("接受连接.");
  24.                 NetworkStream ns = client.GetStream();

  25.                 //獲取本機時間,並保存在字節數組中,使用NetworkStream.Write()方法寫入數據流
  26.                 //然後客戶端就可以通過Read()方法從數據流中獲取這段信息
  27.                 byte[] byteTime = Encoding.ASCII.GetBytes(DateTime.Now.ToString());

  28.                 try
  29.                 {
  30.                     ns.Write(byteTime, 0, byteTime.Length);
  31.                     //關閉數據流和連接
  32.                     ns.Close();
  33.                     client.Close();
  34.                 }
  35.                 catch (Exception e)
  36.                 {


  37.                     Console.WriteLine(e.ToString());
  38.                 }
  39.             }

  40.             listener.Stop();
  41.         }
  42.     }
  43. }



  44. <font color="red">整理這麽長,多+分麽?</font>
复制代码
好了,至於其他連接上后你要做什麽就自由發揮了




评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
你用一个交换机,将你的电脑和另一台电脑插入交换机上面.adsl线路也插进交换机上面,这样你也可以adsl拔号上号。又可以和另一台电脑通信。但你们的IP地址要在同一网段内才能通信,这个自己设置就可以了。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
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服务解决

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
有软件实现虚拟局域网的,应该叫VLAN。记得一些经典的游戏如:实况,NBA,极品飞车可以用这个平台上去和其他的玩家对战,用这个软件也就虚拟了局域网,通过共享就能互相访问文件了。
第二种:架设FTP。通过FTP访问。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马