客户端代码:
package com.sjl.ServerAndClient;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
public class Client1 {
public static void main(String[] args) {
Socket mysocket = null;
DataInputStream in = null;
DataOutputStream out = null;
String str = null;
try {
mysocket = new Socket("localhost",1420);
} catch (IOException e) {System.out.println("无法连接");}
try{
in = new DataInputStream(mysocket.getInputStream());
out = new DataOutputStream(mysocket.getOutputStream());
for(int i=1;i<=100;i++){
str = in.readUTF();
out.writeInt(i);
System.out.println("客户端收到:"+str);
Thread.sleep(500);
}
}catch (Exception e){}
}
}
服务器端代码:
package com.sjl.ServerAndClient;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server1 {
public static void main(String[] args) {
ServerSocket server= null;
Socket you = null;
DataInputStream in = null;
DataOutputStream out = null;
try{
server = new ServerSocket(1420);
you = server.accept();
}catch (IOException e1){
System.out.println("连接不上");
}
try{
in = new DataInputStream(you.getInputStream());
out = new DataOutputStream(you.getOutputStream());
int m = 0;
while(true){
m = in.readInt();
out.writeUTF("你说的数字对应的字符为"+(char)m);
System.out.println("服务器收到:"+m);
Thread.sleep(500);
}
}catch(IOException e){
System.out.println(""+e);
}catch(InterruptedException e2){}
}
}
首先运行server1后运行Client1 控制台一直没有输出,也没有报错!
后来发现是这个原因:
客户端里面的代码:
str = in.readUTF();
out.writeInt(i);
in.readUTF()是客户端从服务器那里获得字符串。
out.writeInt(i)是客户端把数据发送个服务器。
按道理说是没有问题,而且我们经常说代码顺序一般不会有很高的要求,所以我自己在检查的时候也没有想到是这个问题。服务器是收到客户端的数据之后才返回给客户端一个数据,而现在上面的程序的顺序是接受服务端的数据在传输据,这个显而易见,客户端接受不到服务器的数据,不会向下面运行了。
所以在以后的编程中要更改自己的思想,特别是在客户端与服务器之间的网络编程应该注意编码的顺序!!!
以此为戒!!