Java报错,是不是我的端口号不行???

qq_36627026 2016-11-24 10:57:25
这是代码,先是Server端的代码,然后是Client端的代码,然后是Client的报错信息,Server端的代码没有报错!

这是Server端


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

//接受客户端发来的消息,然后发送给所有在线的客户端
public class Server {

public static List<Socket> sockets=
new ArrayList<Socket>();
public static List<String> names=new ArrayList<String>();

public static void main(String args[]){
try {
names.add("小白");
names.add("小黑");
names.add("小红");
names.add("小蓝");
names.add("小青");
System.out.println("服务器启动");
ServerSocket server=new ServerSocket(16469);
int content=0;
while(true){
System.out.println("等待客户端链接");
Socket s=server.accept();//等待客户端链接
sockets.add(s);
System.out.println("客户端已链接,目前在线人数"+sockets.size());
new ServerThread(s,names.get(content++)).start();//服务器为每一个客户端分配线程
}
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}

class ServerThread extends Thread{

private Socket s;
private String name;
public ServerThread(Socket s,String name){
this.s=s;
this.name=name;
}
public void run(){
try {
BufferedReader br=
new BufferedReader(
new InputStreamReader(
s.getInputStream()));
while(true){
String content=br.readLine();//阻塞状态
for(Socket socket: Server.sockets){
OutputStreamWriter osw=new OutputStreamWriter(socket.getOutputStream());
osw.write(content);
osw.flush();
}
System.out.println(name+":"+content);
}
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}




这是Client端的代码!


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {

public static void mian(String args[]){
try {
System.out.println("客户端启动");
Socket s=new Socket("127.0.0.1",16469);
new SendThread(s).start();
new GetThread(s).start();

} catch (UnknownHostException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}

//发送消息的线程
class SendThread extends Thread{
private Socket s;
public SendThread(Socket s){
this.s=s;
}

public void run(){
try {
OutputStreamWriter osw=new OutputStreamWriter(s.getOutputStream());
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
while(true){
String content=br.readLine();
osw.write(content+"\n");
osw.flush();
}
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}

//接受消息的线程
class GetThread extends Thread{
private Socket s;
public GetThread(Socket s){
this.s=s;
}

public void run(){
try {
while(true){
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
String content=br.readLine();//阻塞
System.out.println(content);
}
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}




这是Client报错信息

服务器启动
java.net.BindException: Address already in use: JVM_Bind
at java.net.DualStackPlainSocketImpl.bind0(Native Method)
at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source)
at java.net.AbstractPlainSocketImpl.bind(Unknown Source)
at java.net.PlainSocketImpl.bind(Unknown Source)
at java.net.ServerSocket.bind(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at workspace.Server.main(Server.java:27)


这是什么问题呢??是不是我的端口号被占用了??
...全文
241 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
萧乡月夜 2016-11-25
  • 打赏
  • 举报
回复
确实如上面所说 报错很明显了 是端口已经被其他的程序占用了。 可以看下是不是之前run过的Server没有停止
爱睡觉的阿狸 2016-11-25
  • 打赏
  • 举报
回复
报错信息已经告诉你端口号发生冲突了,你把占用那个端口号的进程杀掉再试试吧。
XxiaoxiaoL 2016-11-25
  • 打赏
  • 举报
回复
看看是不是16469端口被占用了吧
tangwwip 2016-11-25
  • 打赏
  • 举报
回复
换个端口试下不就知道了你这个端口能不能用
xiaoduan95 2016-11-25
  • 打赏
  • 举报
回复
用这个端口之前可以先telnet一下,确认端口未被占用再开。
qq_36627026 2016-11-24
  • 打赏
  • 举报
回复
那个服务器端的没有报错

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧