服务端类:
import java.net.*;
import java.io.*;public class TestServerSocket {
public static void main(String[] args){
try{
ServerSocket ss=new ServerSocket(7586);
while(true){
Socket s=ss.accept();
System.out.println("A client connect!");
DataInputStream dis=new DataInputStream(s.getInputStream());
System.out.println(dis.readUTF());
dis.close();
s.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
---------------------------------------------------------------------
客户端类:
import java.net.*;
import java.io.*;public class TestClientSocket {
public static void main(String[] args){
try{
Socket s=new Socket("127.0.0.1",7586);
DataOutputStream dos=new DataOutputStream(s.getOutputStream());
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
while(true){
String str="Client: "+br.readLine();
if(str.equals("Client: exit"))
break;
System.out.println(str);
dos.writeUTF(str);
dos.flush();
}
br.close();
dos.close();
s.close();
}catch(IOException e){
e.printStackTrace();
}
}
}编译后通过,运行后,在客户端从键盘敲入文字,然后在服务端显示。
我运行时的情况是:第一次和第二次输入文字时程序正常运行,但第三次输入文字时却发生异常:
提示如下:
java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at java.io.DataOutputStream.write(DataOutputStream.java:90)
at java.io.DataOutputStream.writeUTF(DataOutputStream.java:384)
at java.io.DataOutputStream.writeUTF(DataOutputStream.java:306)
at TestClientSocket.main(TestClientSocket.java:15)哪位高手帮我看下,谢谢!!!
import java.net.*;
import java.io.*;public class TestServerSocket {
public static void main(String[] args){
try{
ServerSocket ss=new ServerSocket(7586);
while(true){
Socket s=ss.accept();
System.out.println("A client connect!");
DataInputStream dis=new DataInputStream(s.getInputStream());
System.out.println(dis.readUTF());
dis.close();
s.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
---------------------------------------------------------------------
客户端类:
import java.net.*;
import java.io.*;public class TestClientSocket {
public static void main(String[] args){
try{
Socket s=new Socket("127.0.0.1",7586);
DataOutputStream dos=new DataOutputStream(s.getOutputStream());
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
while(true){
String str="Client: "+br.readLine();
if(str.equals("Client: exit"))
break;
System.out.println(str);
dos.writeUTF(str);
dos.flush();
}
br.close();
dos.close();
s.close();
}catch(IOException e){
e.printStackTrace();
}
}
}编译后通过,运行后,在客户端从键盘敲入文字,然后在服务端显示。
我运行时的情况是:第一次和第二次输入文字时程序正常运行,但第三次输入文字时却发生异常:
提示如下:
java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at java.io.DataOutputStream.write(DataOutputStream.java:90)
at java.io.DataOutputStream.writeUTF(DataOutputStream.java:384)
at java.io.DataOutputStream.writeUTF(DataOutputStream.java:306)
at TestClientSocket.main(TestClientSocket.java:15)哪位高手帮我看下,谢谢!!!
import java.net.*;
import java.io.*; public class TestServerSocket {
public static void main(String[] args){
try{
ServerSocket ss=new ServerSocket(7586);
while(true){
Socket s=ss.accept();
System.out.println("A client connect!");
DataInputStream dis=new DataInputStream(s.getInputStream());
System.out.println(dis.readUTF());
}
}catch(IOException e){
e.printStackTrace();
} finally {
if (dis != null) {
dis.close();
s.close();
}
}}
}
---------------------------------------------------------------------
客户端类:
import java.net.*;
import java.io.*; public class TestClientSocket {
public static void main(String[] args){
try{
Socket s=new Socket("127.0.0.1",7586);
DataOutputStream dos=new DataOutputStream(s.getOutputStream());
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
while(true){
String str="Client: "+br.readLine();
if(str.equals("Client: exit"))
break;
System.out.println(str);
dos.writeUTF(str);
dos.flush();
}
br.close();
dos.close();
s.close();
}catch(IOException e){
e.printStackTrace();
} finally {
if (dos != null) {
br.close();
dos.close();
s.close();
}
}
} }
好像是这样,我没测试.
Client端的程序是socket连接后。在这一次连里多次写数据到Server端,socket连接是不关闭的。
Server端的程序是建立连接,一次读取读取数据就关闭连接。
----------------------------------------------
Server端改成如下(这么改不规范,只是让让你明白原理)
import java.net.*;
import java.io.*;public class TestServerSocket {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(7586);
Socket s = ss.accept();
System.out.println("A client connect!");
while (true) {
DataInputStream dis = new DataInputStream(s.getInputStream());
System.out.println(dis.readUTF());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.net.*;
import java.io.*; public class TestServerSocket {
public static void main(String[] args){
try{
ServerSocket ss=new ServerSocket(7586);
while(true){
Socket s=ss.accept();
System.out.println("A client connect!");
DataInputStream dis=new DataInputStream(s.getInputStream());
System.out.println(dis.readUTF());
-------------不应该在这里关的啊,1楼的处理应该是正确的
dis.close();
s.close();
-------------
}
}catch(IOException e){
e.printStackTrace();
}
}
}
你输入三次,第三次就断开的话,应该跟readUTF()的用法有关系吧
readUTF() 要求流的前两个字节提供UTF字节码长度,而使用notepad转换而来的文件,其格式是前三位是magic code: EF BB BF,后面是UTF字节码,导致读请求失败 你可以试试
字节流用BufferedInputStream bis = new BufferedInputStream(new DataInputStream(system.in)); 比你的方法方便多了!
仅供参考.....
服务器端import java.net.*;
import java.io.*; public class TestServerSocket {
public static void main(String[] args){
DataInputStream dis=null;
Socket s=null;
try{
ServerSocket ss=new ServerSocket(7586);
while(true){
s=ss.accept();
System.out.println("A client connect!");
dis=new DataInputStream(s.getInputStream());
System.out.println(dis.readUTF());
}
}catch(IOException e){
e.printStackTrace();
} finally {
if (dis != null) {
try {
dis.close();
s.close();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}}
} 客户端
import java.net.*;
import java.io.*; public class TestClientSocket {
public static void main(String[] args){
DataOutputStream dos=null;
BufferedReader br=null;
Socket s=null;
try{
s=new Socket("127.0.0.1",7586);
dos=new DataOutputStream(s.getOutputStream());
br=new BufferedReader(new InputStreamReader(System.in));
while(true){
String str="Client: "+br.readLine();
if(str.equals("Client: exit"))
break;
System.out.println(str);
dos.writeUTF(str);
dos.flush();
} }catch(IOException e){
e.printStackTrace();
} finally {
if (dos != null) {
try {
br.close();
dos.close();
s.close();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
} }
Socket s=ss.accept();
System.out.println("A client connect!");
DataInputStream dis=new DataInputStream(s.getInputStream());
System.out.println(dis.readUTF());
dis.close();
s.close();
}"
Socket s=ss.accept(); 这里是阻塞的,当一个客户连上来之后,他就等下一个了
dis.readUTF(),这里也是阻塞的,
如果你的只一个客户的话,就把Socket s=ss.accept();
System.out.println("A client connect!");
DataInputStream dis=new DataInputStream(s.getInputStream());
放到while(true)的外面就行了
dis.close();
s.close();这2个你那么快关闭他干吗,客户端关了后你才再finally里关掉
Socket s=ss.accept();
在等待另一个客户来连接,卡那里了。
可不知道为什么客户端第二次输出没有异常而第三次有呢?