分别运行TCP服务器和TCP客户端,就是互相连不上;希望大神解答
这是服务器端:
public class ServerDemo implements Runnable { @Override
public void run() {
ServerSocket ss = null;
Socket s = null;
BufferedReader br = null;
BufferedWriter bw = null; try {
ss = new ServerSocket(10000);
s = ss.accept();
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
while (true) {
System.out.println("server start!");
bw.write("Server Test!");
bw.flush();
for(String temp=null;(temp = br.readLine()) != null;){
System.out.println(temp);
} }
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}
这是客户端:public class ClientDemo implements Runnable {
Socket s;
BufferedReader br;
BufferedReader br2;
BufferedWriter bw; @Override
public void run() { try {
s = new Socket();
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); while (true) {
System.out.println("client start!");
System.out.println(br.readLine());
bw.write("Client Test");
bw.flush();
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }}
多线程启动部分:
public class Main { public static void main(String[] args) {
new Thread(new ClientDemo()).start();
new Thread(new ServerDemo()).start();
}
}
这是服务器端:
public class ServerDemo implements Runnable { @Override
public void run() {
ServerSocket ss = null;
Socket s = null;
BufferedReader br = null;
BufferedWriter bw = null; try {
ss = new ServerSocket(10000);
s = ss.accept();
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
while (true) {
System.out.println("server start!");
bw.write("Server Test!");
bw.flush();
for(String temp=null;(temp = br.readLine()) != null;){
System.out.println(temp);
} }
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}
这是客户端:public class ClientDemo implements Runnable {
Socket s;
BufferedReader br;
BufferedReader br2;
BufferedWriter bw; @Override
public void run() { try {
s = new Socket();
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); while (true) {
System.out.println("client start!");
System.out.println(br.readLine());
bw.write("Client Test");
bw.flush();
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }}
多线程启动部分:
public class Main { public static void main(String[] args) {
new Thread(new ClientDemo()).start();
new Thread(new ServerDemo()).start();
}
}
new Socket();
->new Socket("localhost", 10000);
你没有指定服务器地址和端口号
你可以在一些代码后加上一些输出语句,比如accept() 加上System.out.println("接收成功");然后看代码在哪个位置停了下来。
Thread t1 = new Thread(new ClientDemo());
t1.sleep(2000);
t2.start();
t1.start();
你能先测试下,不用多线程。看看启动服务端之后,在手动启动客户端,看看能否连接成功。我怀疑是不是客服端的程序在先启动之后,发现没有服务端,它就死翘翘。
也不会去寻找服务端,也不会再次生成客服端。
Thread.sleep(100);
new Thread(new ClientDemo()).start();
另外你的i/o没有放在while中只能输入一次的,while在你这里没用,测试一下,改后是好使的