初学socket的问题
package test;import java.net.*;
import java.io.*;
public class TCPServer {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(6666);
Socket s = ss.accept();
System.out.println("a client connect!");
}
}
这是服务器的
package test;
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) throws Exception {
Socket s = new Socket("127.0.0.1",6666);
}
}
这是客户端的
为什么运行出先
run:
Exception in thread "main" java.net.SocketException: select failed
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
at java.net.ServerSocket.implAccept(ServerSocket.java:462)
at java.net.ServerSocket.accept(ServerSocket.java:430)
at test.TCPServer.main(TCPServer.java:10)
Java Result: 1
成功生成(总时间:3 秒)
用的是netbeanIDE工具写的
--------------------编程问答-------------------- 你是不是已经开了一个server了 --------------------编程问答-------------------- 没有.用360看了没有占用端口的
--------------------编程问答-------------------- 先启动server后启动client --------------------编程问答-------------------- 原因在于 Java现在对 IPv6 的支持很不好
卸载IPv6就好了。
在本地连接的“属性”中卸载。 --------------------编程问答-------------------- 没问题的呢,你换个端口试试。。。 --------------------编程问答-------------------- 都试过了.还不行呢.是不是系统问题啊
--------------------编程问答-------------------- 到xp上跑下试试。 --------------------编程问答-------------------- 别把serversocket的accept()方法放到主线程中,这样会造成阻塞的,试试用一个线程去执行看看。 --------------------编程问答-------------------- 从你的错误堆栈信息可以看到
错误发生在at java.net.PlainSocketImpl.socketAccept(Native Method)方法中
那么看了下源码发现是这样一个方法
private native void socketAccept(SocketImpl s)
恩 我很想帮你 但是本地方法java好像根本就不开放源码 所以我也不知道里面到底是怎么写的了 --------------------编程问答-------------------- 正在学习中,帮顶了 --------------------编程问答-------------------- 360 V5啊 --------------------编程问答-------------------- 必须先启动server、
然后启动client、
看了lz的程序、应该没问题呀、、 --------------------编程问答-------------------- 为在eclipse中试过了、
没问题、
是不是你ip写错了?
--------------------编程问答-------------------- 客户端和服务器端的代码都没错,楼主贴一下你的测试代码 看看 。。。 --------------------编程问答-------------------- 我试过了,能行的。 --------------------编程问答-------------------- 谁在win7上能运行的 --------------------编程问答-------------------- 代码应该没问题的,不过最好写个线程,要不着这程序只能是个原料 --------------------编程问答-------------------- 我的操作系统是Windows7 32Bit 旗舰版,先贴一下我在Eclipse下测试通过的代码:
/**Server*/
package test;
import java.net.*;
import java.io.*;
public class TCPServer {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(6666);
Socket s = ss.accept();
System.out.println("a client connect!");
}
}
/**Client*/
package test;
import java.net.*;
import java.io.*;
public class TCPClient {
public static void main(String[] args) {
try {
Socket s = new Socket("127.0.0.1", 6666);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
代码在Win7下测试通过,未出现问题。我的代码仅仅是比楼主多了错误处理而已。在DOS下运行时,现运行服务器端,命令:java test.TCPServer 然后运行客户端: java test.TCPClient 运行后,服务器端显示“a client connect”.请楼主添加捕获错误的代码,再测试下。
希望能够帮到楼主.
--------------------编程问答-------------------- 上楼的代码试过了.也不行啊.郁闷啊
但是我装了个虚拟机xp系统的.将代码那去测试.正常输出.
但是拿来win7测试.又不行的.我觉得是ipv6的问题.但是不能卸载,不打扣也不能运行!!郁闷!
是不是我的系统问题呢? --------------------编程问答-------------------- 哦,这个问题还真奇怪,看来应该是跟楼主的Win7系统设置相关了。楼主的IPv6默认是开启的吗? --------------------编程问答-------------------- 阅
顶贴 --------------------编程问答-------------------- ipv6启动的了.但是没有网络访问.
应该没有关系吧
--------------------编程问答-------------------- public class TCPServer {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(6666);
Socket s = ss.accept();
System.out.println("a client connect!");
}
}
/**Client*/
package test;
import java.net.*;
import java.io.*;
public class TCPClient {
public static void main(String[] args) {
try {
Socket s = new Socket("127.0.0.1", 6666);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
--------------------编程问答-------------------- 我也是这样的
前一阵还好好的
郁闷
补充:Java , Java SE