//客户端(MyClient.java):import java.io.*;
import java.net.*;
public class MyClient
{
public static void main(String args[])
{
Socket client;
PrintStream psc;
System.out.println("连接成功");
while(true)
{
try
{
client = new Socket("localhost",1234);
psc = new PrintStream(client.getOutputStream());
BufferedReader bfc = new BufferedReader(new InputStreamReader(System.in));
psc.println(bfc.readLine());
BufferedReader brc = new BufferedReader(new InputStreamReader(client.getInputStream()));
System.out.println("Server said:"+brc.readLine());
client.close();
brc.close();
}
catch(IOException e)
{
System.out.println(e);
}
}
}
}服务器端(MyServer.java):
import java.io.*;
import java.net.*;
public class MyServer
{
public static void main(String args[])
{
ServerSocket server;
PrintStream pss;
while(true)
{
try{
server = new ServerSocket(1234);
Socket sk = server.accept();
BufferedReader brs = new BufferedReader(new InputStreamReader(sk.getInputStream()));
System.out.println("Client said:"+brs.readLine());
pss = new PrintStream(sk.getOutputStream());
BufferedReader bfs = new BufferedReader(new InputStreamReader(System.in));
pss.println(bfs.readLine());
brs.close();
bfs.close();
server.close();
}
catch(IOException e)
{
System.out.println(e);
}
}
}
}以上分别是我的两个JAVA程序,实现的是客户与服务器之间进行对话,程序可以运行,但是互相输入两次信息之后,服务器端就会显示“地址被占用的错误提示”(大家可以试一下),请大家帮我解决一下这个问题,谢谢!!
import java.net.*;
public class MyClient
{
public static void main(String args[])
{
Socket client;
PrintStream psc;
System.out.println("连接成功");
while(true)
{
try
{
client = new Socket("localhost",1234);
psc = new PrintStream(client.getOutputStream());
BufferedReader bfc = new BufferedReader(new InputStreamReader(System.in));
psc.println(bfc.readLine());
BufferedReader brc = new BufferedReader(new InputStreamReader(client.getInputStream()));
System.out.println("Server said:"+brc.readLine());
client.close();
brc.close();
}
catch(IOException e)
{
System.out.println(e);
}
}
}
}服务器端(MyServer.java):
import java.io.*;
import java.net.*;
public class MyServer
{
public static void main(String args[])
{
ServerSocket server;
PrintStream pss;
while(true)
{
try{
server = new ServerSocket(1234);
Socket sk = server.accept();
BufferedReader brs = new BufferedReader(new InputStreamReader(sk.getInputStream()));
System.out.println("Client said:"+brs.readLine());
pss = new PrintStream(sk.getOutputStream());
BufferedReader bfs = new BufferedReader(new InputStreamReader(System.in));
pss.println(bfs.readLine());
brs.close();
bfs.close();
server.close();
}
catch(IOException e)
{
System.out.println(e);
}
}
}
}以上分别是我的两个JAVA程序,实现的是客户与服务器之间进行对话,程序可以运行,但是互相输入两次信息之后,服务器端就会显示“地址被占用的错误提示”(大家可以试一下),请大家帮我解决一下这个问题,谢谢!!
放到死循环里面 当然地址被占用了
import java.io.*;
import java.net.*;
public class MyServer
{
public static void main(String args[])
{
ServerSocket server=null;
BufferedReader brs =null;BufferedReader bfs=null;
PrintStream pss;
try {
server = new ServerSocket(1234);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
while(true)
{
try{
Socket sk = server.accept();
brs = new BufferedReader(new InputStreamReader(sk.getInputStream()));
System.out.println("Client said:"+brs.readLine());
pss = new PrintStream(sk.getOutputStream());
bfs = new BufferedReader(new InputStreamReader(System.in));
pss.println(bfs.readLine());
//brs.close();
//bfs.close();
//server.close();
}
catch(IOException e)
{
System.out.println(e);
}
}
}
}import java.io.*;
import java.net.*;
public class MyClient
{
public static void main(String args[])
{
Socket client;
PrintStream psc;
BufferedReader brc;
System.out.println("连接成功");
while(true)
{
try
{
client = new Socket("localhost",1234);
psc = new PrintStream(client.getOutputStream());
BufferedReader bfc = new BufferedReader(new InputStreamReader(System.in));
psc.println(bfc.readLine());
brc = new BufferedReader(new InputStreamReader(client.getInputStream()));
System.out.println("Server said:"+brc.readLine());
//client.close();
//brc.close();
}
catch(IOException e)
{
System.out.println(e);
}
}
}
}
brs = new BufferedReader(new InputStreamReader(sk.getInputStream()));
System.out.println("Client said:"+brs.readLine());//-----在这里卡到了那边不发消息过来程序是走不下去的
pss = new PrintStream(sk.getOutputStream());
bfs = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Client said:"+brs.readLine());//-----在这里卡到了那边不发消息过来程序是走不下去的
放到一个专读的线程中去,那样,它怎么卡怎么阻塞都不会影响主线程了。
import java.io.*;
import java.net.*;
public class MyClient
{
private static Socket client=null;
private static PrintStream psc=null;
private static BufferedReader brc=null;
public static void main(String args[])
{
boolean flag=false;
System.out.println("连接成功");
while(true)
{
try
{
client = new Socket("localhost",1234);
if (!flag) {
flag=true;
MyThread t=new MyThread();
t.start();
}
brc = new BufferedReader(new InputStreamReader(client.getInputStream()));
System.out.println("Server said:"+brc.readLine());
//client.close();
//brc.close();
}
catch(IOException e)
{
System.out.println(e);
}
}
}
class MyThread extends Thread{
public void run(){
psc = new PrintStream(client.getOutputStream());
while(true)
BufferedReader bfc = new BufferedReader(new InputStreamReader(System.in));
psc.println(bfc.readLine());
}
}
}