该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
运行时,服务器端一直接收不到客户端已经启动,一直在等待中,我写了两个线程类,一个用于发消息,一个用于收消息,ip和端口号均正确,求大佬指教问题在哪,代码如下
Server
package cn.com.socket;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
public class Server{
private ServerSocket server;
public static void main(String[] args) {
new Server();
}
public Server() {
try {
server = new ServerSocket(9001);
System.out.println("等待客户端连接...");
chat();
} catch (SocketException se) {
se.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
private void chat() {
try {
new Send(server.accept(),"服务器").start();
new Receive(server).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Client
package cn.com.socket;
import java.io.IOException;
import java.net.Socket;
import java.net.SocketException;
public class Client{
private Socket server;
public static void main(String[] args) {
new Client();
}
public Client() {
try {
server = new Socket("192.168.43.235", 9001);
chat();
} catch (SocketException se) {
se.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
private void chat() {
new Send(server,"客户端").start();
new Receive(server).start();
}
}
以下是那两个线程:
Send
package cn.com.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Send extends Thread{
private Socket s;
private String name;
private PrintWriter out;
private BufferedReader br;
public void run() {
String msg;
try {
msg = this.name+" : "+"你好";
out.println(msg);
while(!msg.endsWith("88")) {
msg = br.readLine();
out.println(this.name+" :"+msg);
}
System.out.println("聊天结束!");
} catch (IOException e) {
e.printStackTrace();
} finally {
if(out != null) {
out.close();
}
if(s != null) {
try {
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public Send(Socket socket,String name) {
this.name = name;
this.s = socket;
this.br = new BufferedReader(new InputStreamReader(System.in));
try {
this.out = new PrintWriter(s.getOutputStream(),true);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Receive
package cn.com.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Receive extends Thread{
private Socket s;
private ServerSocket ss;
private PrintWriter out;
private BufferedReader in;
@Override
public void run() {
String acc;
try {
acc = in.readLine();
System.out.println(acc);
while (!acc.endsWith("88")) {
acc = in.readLine();
out.println(acc);
System.out.println(acc);
}
System.out.println("聊天结束!");
} catch (IOException e) {
e.printStackTrace();
} finally {
if(in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(out != null) {
out.close();
}
if(this.s != null) {
try {
this.s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(this.ss != null) {
try {
this.ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public Receive(Socket socket) {
this.s = socket;
try {
this.out = new PrintWriter(s.getOutputStream());
this.in = new BufferedReader(new InputStreamReader(s.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}
public Receive(ServerSocket ssocket) throws IOException {
this(ssocket.accept());
this.ss = ssocket;
}
}