服务器端 TalkServer.java :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 TalkServer { public static void main(String[] args) throws IOException { // 创建一个ServerSocket
ServerSocket server = new ServerSocket(8080); // 准备接受客户连接,如果有客户连接到,则创建一个socket对象,如果没有客户连接到,那么该程序会停在本行一直等待,像是在睡眠或者假死,这种行为叫做“阻塞”,阻塞是网络通信中的术语,就是你等别人响应,如果必须等到,等不到就一直等,就是阻塞,等不到也继续向前走的当然就是非阻塞。
Socket socket = server.accept(); // 从socket中获取一个输入对象,以便接受从网络上来的数据
BufferedReader socketInput = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 从标准输入中获取一个输入对象,以便接受从键盘上传来的数据,如果想让服务器端和客户端自由对话的话可以用此对象
//BufferedReader keyboardInput = new BufferedReader(new InputStreamReader(System.in)); // 从socket中获取一个
PrintWriter socketOutput = new PrintWriter(socket.getOutputStream(),true); //定义一些变量
String input; // 一直执行,直到客户端表示要断开
while(true){
//从客户端获取用户输入的字符串
input = socketInput.readLine();
//发送到屏幕
System.out.print("客户:");
System.out.println(input); //准备好回复语句
String reply= reply(input);
//发送到客户端
socketOutput.println(reply);
//发送到屏幕
System.out.print("小瑶瑶:");
System.out.println(reply); //客户如果输入的是再见则退出循环
if(input.equals("再见")){
break;
}
} //关闭释放资源
socketInput.close();
socketOutput.close();
socket.close(); } //回复方法
private static String reply(String input) { String output=replys[number%7]; if(number%7==5){
output = output+" "+input;
} number++;
return output;
} //回复方法用到的一些变量
static int number =0; static String[] replys = new String[7]; static{
replys[0]= "你说的啥,我听不见?";
replys[1]= "声音再大点行不?";
replys[2]= "声音再大点一点点行不?";
replys[3]= "还是听不清……";
replys[4]= "看来是网络的问题,你要不说慢点?";
replys[5]= "听到了!听到了!你说的是:";
replys[6]= "完了,又听不清了……";
}} import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;public class TalkClient { public static void main(String[] args) throws UnknownHostException, IOException { Socket socket = new Socket("127.0.0.1",8080); // 从socket中获取一个输入对象,以便接受从网络上来的数据
BufferedReader socketInput = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 从标准输入中获取一个输入对象,以便接受从键盘上传来的数据
BufferedReader keyboardInput = new BufferedReader(new InputStreamReader(System.in)); // 从socket中获取一个
PrintWriter socketOutput = new PrintWriter(socket.getOutputStream(),true); // 定义一些变量
String input; // 一直执行
while(true){ //从键盘获取数据,通过socket对象发送出去
input = keyboardInput.readLine();
socketOutput.println(input); //接收从socket中获取的服务器端发回的回应信息,并发送到屏幕上
input = socketInput.readLine();
System.out.println(input);
} }}
运行的错误:
Exception in thread "main" java.net.BindException: Address already in use: JVM_Bind
at java.net.PlainSocketImpl.socketBind(Native Method)
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 TalkServer.main(TalkServer.java:14)是不是要下载一个Tomcat服务器,才能运行?

解决方案 »

  1.   

    这个是java程序跟Tomcat没关系,估计是因为你的8080端口已经被占用你可以换个别的端口试试……
      

  2.   

    Exception in thread "main" java.net.BindException: Address already in use: JVM_Bind
    端口被占用,  可能你上次启动Server之后, 没关闭, 然后又重新启动Server了, 两个进程不可能在同一个端口监听的. 解决: 换个端口启动.  或者 在任务管理器中杀死java那个进程. 或者重启动电脑了.
      

  3.   

    端口已被占用。
    用telnet xxx.xxx.xxx.xxx 8080 试一下,能连上,就说明 这个端口被用着,这个命令同样可以测试 自已开启的端口。
      

  4.   

    8080 端口被 占用 ,换个端口
    或者 杀掉占用进程 
    你可以 windows 版本:netstat -ano|findstr 8080
    然后把对应的进程从任务管理器里面kill掉
    linux版本 :netstat -anp|grep 8080  然后把对应的进程杀掉