各位大侠,帮忙看一下,今天没事写了一个简单的socket小应用,客户端和服务器端的会话,当程序运行时,客户端先输入信息后回车,这时Eclipse的控制台由客户端的转化成服务器端的控制台,服务器端收到客户端的信息后进行答复,控制台自然而然的又转化成客户端的控制台,并显示之前客户端和服务器端的第一次回话内容,但是当客户端第二次输入信息并回车时,控制台并没有跳转,和服务器端就不能通话了,下面是运行的结果:
客户端(我):
zoula
服务器:haoa
客户端(我):
quna
hh
kjkj下面是我的代码:服务器端的代码:
package com.my;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;public class MyServer {
public static void main(String[] args) throws Exception{
ServerSocket server = null;
Socket client = null;
BufferedReader read = null;
PrintStream out = null;
BufferedReader serverInput = null;
server = new ServerSocket(5555);
boolean f = true;
while(f)
{
System.out.println("服务器端正在运行,等待客户端的连接");
client = server.accept();
read = new BufferedReader(new InputStreamReader(client.getInputStream()));
serverInput = new BufferedReader(new InputStreamReader(System.in));
out = new PrintStream(client.getOutputStream());
boolean flag = true;
while(flag)
{
String str = read.readLine();
if(null == str || "".equals(str))
{
flag = false;
}else if("bye".equals(str))
{
flag = false;
}else
{
System.out.println("客户端:" + str);
boolean inflag = true;
while(inflag)
{
System.out.println("服务器(我):");
String inputStr = serverInput.readLine();
if(inputStr == null || "".equals(inputStr))
{
System.out.println("请输入正确的信息");
inflag = false;
}else
{
// System.out.println("服务器(我):" + inputStr);
out.println(inputStr);
}
}
}
}
out.close();
client.close();
}
server.close();
}}
客户端的代码:package com.my;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;public class MyClient {
public static void main(String[] args) throws Exception {
Socket client = null;
client = new Socket("localhost",5555);
BufferedReader buf = null;
PrintStream out = null;
BufferedReader input = null;
input = new BufferedReader(new InputStreamReader(System.in));
out = new PrintStream(client.getOutputStream());
buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
boolean flag = true;
while(flag)
{
System.out.println("客户端(我):");
String str = input.readLine();
if(str == null || "".equals(str))
{
flag = false;
}else
{
out.println(str);
String serverStr = buf.readLine();
System.out.println("服务器:"+serverStr);
}
}
buf.close();
client.close();
}}
客户端(我):
zoula
服务器:haoa
客户端(我):
quna
hh
kjkj下面是我的代码:服务器端的代码:
package com.my;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;public class MyServer {
public static void main(String[] args) throws Exception{
ServerSocket server = null;
Socket client = null;
BufferedReader read = null;
PrintStream out = null;
BufferedReader serverInput = null;
server = new ServerSocket(5555);
boolean f = true;
while(f)
{
System.out.println("服务器端正在运行,等待客户端的连接");
client = server.accept();
read = new BufferedReader(new InputStreamReader(client.getInputStream()));
serverInput = new BufferedReader(new InputStreamReader(System.in));
out = new PrintStream(client.getOutputStream());
boolean flag = true;
while(flag)
{
String str = read.readLine();
if(null == str || "".equals(str))
{
flag = false;
}else if("bye".equals(str))
{
flag = false;
}else
{
System.out.println("客户端:" + str);
boolean inflag = true;
while(inflag)
{
System.out.println("服务器(我):");
String inputStr = serverInput.readLine();
if(inputStr == null || "".equals(inputStr))
{
System.out.println("请输入正确的信息");
inflag = false;
}else
{
// System.out.println("服务器(我):" + inputStr);
out.println(inputStr);
}
}
}
}
out.close();
client.close();
}
server.close();
}}
客户端的代码:package com.my;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;public class MyClient {
public static void main(String[] args) throws Exception {
Socket client = null;
client = new Socket("localhost",5555);
BufferedReader buf = null;
PrintStream out = null;
BufferedReader input = null;
input = new BufferedReader(new InputStreamReader(System.in));
out = new PrintStream(client.getOutputStream());
buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
boolean flag = true;
while(flag)
{
System.out.println("客户端(我):");
String str = input.readLine();
if(str == null || "".equals(str))
{
flag = false;
}else
{
out.println(str);
String serverStr = buf.readLine();
System.out.println("服务器:"+serverStr);
}
}
buf.close();
client.close();
}}
解决方案 »
- 解答关于:System.ArrayCopy的问题。
- 图片以像素形式保存问题
- 如何用Properties类实现多名用户名登录?
- Exceptionjava.net.ConnectException: Connection refused: connect
- 关于用JAVA实现LBS移动定位的问题 ..急~~~~~
- 大侠帮忙:用C写的socket和用java写的socket能通信吗?
- HELP!!!
- 请问如何得到一个随机的数?
- 我使用了这个语句:URL url1=new URL(urls),编译时提示错误为: Class URL not found.
- 关于java学习
- 如何将Java中的两个Object进行比较?
- 关于一道简单的java基础题的疑惑
1、没睡,是不是把cpu占完了
2、是不是输入了空行,导致循环结束,退出了。如果都不是,加断点调试下吧。
if(inputStr == null || "".equals(inputStr))
{
System.out.println("请输入正确的信息");
inflag = false;
}else
{
// System.out.println("服务器(我):" + inputStr);
out.println(inputStr);
}
里面控制循环变量的放错位置了。
改为如下
if(inputStr == null || "".equals(inputStr))
{
System.out.println("请输入正确的信息");
}else
{
// System.out.println("服务器(我):" + inputStr);
out.println(inputStr);
inflag = false;
}