Java网络编程问题

我写了一个和网络相关的程序,在局域网中测试可以成功运行,但是在Internet上运行时就无法得到输入的文件和文件内容(我是直接用cmd telnet访问的),请达人指点,代码如下:
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;

public class Server{
public static void main(String[] args){
try{
ServerSocket sesock=new ServerSocket(8080);
while(true){
final Socket sock=sesock.accept();
new Thread(new Runnable(){
public void run(){
try{
InputStream ins=sock.getInputStream();
OutputStream ous=sock.getOutputStream();
Scanner in=new Scanner(ins);
PrintWriter out=new PrintWriter(ous,true);
out.println("Hello,enter bye to leave");
while(in.hasNextLine()){
String line=in.nextLine();
if(line.toUpperCase().equals("BYE")){
break;
}
out.println("Echo: "+line);
try{
File f=new File(line);
if(f.isDirectory()){
String[] files=f.list();
for(String name:files){
out.println(name);
}
}else if(f.isFile()){
FileReader fis=new FileReader(f);
char[] buff=new char[4096];
int len=0;
StringBuffer fileText=new StringBuffer("");
while((len=fis.read(buff))!=-1){
String s=new String(buff,0,len);
fileText=fileText.append(s);
}
out.println(fileText);
}
}catch(Exception e){
out.println(e.getMessage());
}
}
}catch(IOException e){
JOptionPane.showMessageDialog(null,e.getMessage(),"错误提示",JOptionPane.ERROR_MESSAGE);
}finally{
try{
sock.close();
}catch(IOException e){
JOptionPane.showMessageDialog(null,e.getMessage(),"错误提示",JOptionPane.ERROR_MESSAGE);
}
}
}
}).start();
}
}catch(Exception e){
JOptionPane.showMessageDialog(null,":-D你完蛋了","错误提示",JOptionPane.ERROR_MESSAGE);
}
}
}
多谢两位大大的指点。 lockxxx说的方法还要对方进入路由进行PAT设置吧。但是我希望的是对方运行程序,我就能够看到对方的目录和文件。我在网上查了下,感觉似乎很难实现的样子,但是很多软件不是都实现了这种功能么?可不可以我先让对方机器和网关机器做socket连接,然后我在和网关机器做socket连接呢?麻烦了。 最好能有个例子。

第1个回答  2009-08-16
我这也只能在局域网里测试,没有问题
所以我还是怀疑你的 internet 方式不对
Hello,enter bye to leave 能看到?

如果正是 internet 的话,那个IP地址和端口极有可能是 NAT 过了的,肯定会有所变化
第2个回答  2009-08-17
楼上说的有道理。

在互联网上进行通讯,肯定要考虑是否存在NAT,如果有,看是不是用的是路由器,如果用的是路由器,你可以在路由器里进行一些端口映射。

将8080端口映射到那一台电脑上。本回答被提问者采纳

java.net异常摘要
Java.net 异常是 Java 网络编程过程中可能出现的一系列异常,它们用于捕捉和处理与网络相关的错误。这些异常的抛出帮助开发者在程序中定位和解决问题。以下是 Java.net 异常的简要摘要:1. **BindException**:当尝试将套接字绑定到本地地址和端口时发生错误,程序会抛出此异常。这种情形可能由于端口被占...

java网络编程写一个基础的小程序一直提示 java.net.SocketException: sel...
可能是连接语句出错了,好好检查一下细节方面 例如:服务器端需要指定一个确定的端口号来创建创建服务器对象 Socket socket = new Socket("168.150.12.53",9999);并用此端口号进行监听。。Socket s = server.accept() ; \/\/ 监听窗口,等待连接 或:Socket socket = new Socket(InetAddress.get...

有几个java网络编程基础的选择题 哪位大神给下答案
、Applet为一种特殊的Panel,它可作为Java Applet程序的最外层容器。 ( )2、Java的源码中定义多少个类,编译后结果就生成多少个以.class为后缀的字节码文 ( )3、Java程序中,使用关键字new创建新的类对象,使用关键字free回收无用的类对象。 ( )4、Java有垃圾回收机制,可在指定的...

java 网络编程程序问题
\/\/通过accept方法获取连接过来的客户端对象 Socket s = ss.accept();String ip = s.getInetAddress().getHostAddress();System.out.println(ip+"...connected");\/\/获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据。InputStream in = s.getInputStream();byte[] buf = new ...

java网络编程程序问题,客户端窗体关闭不了
那是因为没有触发关闭事件的地方,你那里只添加了一个关闭中的事件处理 在main里追加 client.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

java网络编程应该怎样在客户端和服务器间实现通信?
服务器端:import java.awt.*;\\x0d\\x0aimport java.awt.event.WindowAdapter;\\x0d\\x0aimport java.awt.event.WindowEvent;\\x0d\\x0aimport java.io.*;\\x0d\\x0aimport java.net.*;\/*6、 采用UDP协议,编写一个Java网络应用程序,该应用分服务器端程序和客户端程序两部分。\\x0d\\x0a*...

java网络编程的问题,不知道哪里出现问题。一个客户端向服务端上传图片的...
错就错在你定义了个byte数组,导致最后一个不到1024byte,也去读那么多!

java 网络编程 抛出Socket is closed异常 大虾帮帮忙
你的客户端socket断掉了,服务端当然抛异常!在服务端中accept方法是堵塞的..在链接断开时要重新accept.而不能让程序结束!

JAVA网络编程SeverSocket,Socket与accept报错
要卸载的。。。你可以追问 别老是让我修改答案来回答。要是卸载不了的话 我也没有办法, 你运行的环境应该是win7上面虚拟的xp系统,你就从这个上面去想办法吧,我觉得你把自己的开发环境搞得如此复杂,出现这样的系统引起的问题是很正常的现象,我想你在选择这种环境的时候 应该有相当的自信来面对...

java网络编程中,对于客户端和服务器的tcp连接,如果客户端异常断开连接...
这个得用java心跳处理机制。就是客户端每隔一段时间向服务器发送指定信息,如果服务器没有收到客服端发来的信息,这时服务器和客服端连接就已经断开。具体的心跳实现百度上很多。

相似回答
大家正在搜