服务器
public class Server1 {
private ServerSocket server; public Server1() {
try {
server = new ServerSocket(7);
} catch (IOException e) {
System.out.println(e);
}
}
public void run() {
System.out.println("Server starting...");
try {
Socket socket = server.accept();
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String inputLine, outputLine; while ((inputLine = in.readLine()) != null) {
outputLine = "Server1: " + inputLine;
out.println(outputLine);
if (inputLine.equals("exit")){
System.out.println("Server closed");
break;
}
}
out.close();
in.close();
socket.close();
server.close();
} catch (IOException e) {
System.out.println(e);
}
}
public static void main(String args[]){
Server1 myServer = new Server1();
myServer.run();
}
}客户端
public class Client {
private Socket socket;
private PrintWriter out;
private BufferedReader in;
private BufferedReader fromUser; public Client() {
fromUser = new BufferedReader(new InputStreamReader(System.in));
}
public void run(){
try{
System.out.print("Choose a port please:");
String choice = fromUser.readLine();
socketSwitch(choice);
while(true){
String line = fromUser.readLine();
if (line == null || line.equals("exit"))
{
out.println("exit");
break;
}
if (line.equals("echo") || line.equals("myecho")){
socketSwitch(line);
continue;
}
out.println(line);
System.out.println(in.readLine());
}
in.close();
out.close();
fromUser.close();
socket.close();
}catch(IOException e){
}
}
public void socketSwitch(String line){
int port = 0;
if(line.equals("echo")){
port = 7;
System.out.println("Client connects to port 7");
}
if(line.equals("myecho")){
port = 20001;
System.out.println("Client connects to port 20001");
}
try{
socket = new Socket("localhost", port);
out = new PrintWriter(socket.getOutputStream(),true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
catch(IOException e){
}
}
public static void main(String args[]){
Client myClient = new Client();
myClient.run();
}
}运行client后第一次可以连接上server,但是再次连接该server的时候就不能正常工作了,得关掉server重开才可以
请教解决的方法
谢谢
public class Server1 {
private ServerSocket server; public Server1() {
try {
server = new ServerSocket(7);
} catch (IOException e) {
System.out.println(e);
}
}
public void run() {
System.out.println("Server starting...");
try {
Socket socket = server.accept();
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String inputLine, outputLine; while ((inputLine = in.readLine()) != null) {
outputLine = "Server1: " + inputLine;
out.println(outputLine);
if (inputLine.equals("exit")){
System.out.println("Server closed");
break;
}
}
out.close();
in.close();
socket.close();
server.close();
} catch (IOException e) {
System.out.println(e);
}
}
public static void main(String args[]){
Server1 myServer = new Server1();
myServer.run();
}
}客户端
public class Client {
private Socket socket;
private PrintWriter out;
private BufferedReader in;
private BufferedReader fromUser; public Client() {
fromUser = new BufferedReader(new InputStreamReader(System.in));
}
public void run(){
try{
System.out.print("Choose a port please:");
String choice = fromUser.readLine();
socketSwitch(choice);
while(true){
String line = fromUser.readLine();
if (line == null || line.equals("exit"))
{
out.println("exit");
break;
}
if (line.equals("echo") || line.equals("myecho")){
socketSwitch(line);
continue;
}
out.println(line);
System.out.println(in.readLine());
}
in.close();
out.close();
fromUser.close();
socket.close();
}catch(IOException e){
}
}
public void socketSwitch(String line){
int port = 0;
if(line.equals("echo")){
port = 7;
System.out.println("Client connects to port 7");
}
if(line.equals("myecho")){
port = 20001;
System.out.println("Client connects to port 20001");
}
try{
socket = new Socket("localhost", port);
out = new PrintWriter(socket.getOutputStream(),true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
catch(IOException e){
}
}
public static void main(String args[]){
Client myClient = new Client();
myClient.run();
}
}运行client后第一次可以连接上server,但是再次连接该server的时候就不能正常工作了,得关掉server重开才可以
请教解决的方法
谢谢
public static void main(String args[]){
new Thread(){
public void run()
{
while(true){
Server1 myServer = new Server1();
myServer.run();}
}
}.start();
}
Choose a port please:echo
Client connects to port 7
hi
Server1: hi
echo
Client connects to port 7
hi
hi
hi
再次用echo命令连接port7后,没有回音了
Choose a port please:echo
Client connects to port 7
hi
Server1: hi
myecho
Client connects to port 20001
hoho
Server2: hoho
echo
Client connects to port 7
hi
hi
hi
没回音
我改的只是让一个Client关闭后,Server不会关闭。就像搂住说的那样
如果要实现楼上的,当然要开多个线程或者用通道了
public class Server1 {
protected ServerSocket server; public Server1() {
try {
server = new ServerSocket(7);
} catch (IOException e) {
System.out.println(e);
}
}
public void run(Socket _s) {
Socket socket = _s;
System.out.println("Server starting...");
try {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String inputLine, outputLine;
while ((inputLine = in.readLine()) != null) {
outputLine = "Server1: " + inputLine;
out.println(outputLine);
if (inputLine.equals("exit")){
System.out.println("Server closed");
break;
}
}
out.close();
in.close();
//socket.close();
//server.close();
} catch (IOException e) {
System.out.println(e);
}
}
public static void main(String args[]){
final Server1 myServer = new Server1();
while(true){
final Socket s;
try {
s = myServer.server.accept();
new Thread(){
public void run()
{
myServer.run(s);
}
}.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}}