java socket发送和接收多条数据的情况怎么解决

lqsmn613 2009-11-04 01:30:40
。。。。。。。。。
for (int j = 0; j < list_day.size(); j++) {
String day = (String) list_day.get(j);
String apwork = (String) list_apwork.get(j);
String pmwork = (String) list_pmwork.get(j);
String scheme = (String) list_scheme.get(j);
String sw = day + "#" + apwork + "#" + pmwork + "#"
+ scheme;
System.out.println(sw);
System.out.println("-------------------------");
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(socket
.getOutputStream()));
bw.write(sw + "\r\n\r\n");
bw.flush();
}
。。。。。。。。。。。。。

服务器上从数据库取得的数据,在for循环中的打印可以看到都有的,但是在接收的客户端那却只能取得第一条的数据或者是N条的第一条数据,应该如何写,才能在客户端取得这些不同的多条数据呢?
这个到底是服务器取得的数据没能全部传出去,只能传出去一条即第一条数据的缘故呢?
还是客户端没有正常读取数据的缘故呢??
...全文
829 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lqsmn613 2009-11-04
  • 打赏
  • 举报
回复
Client:

package test;

import java.io.*;
import java.net.*;

public class Client {

public static void main(String args[]) {
Socket socket = null;
try {
socket = new Socket("10.10.9.222", 6666);

BufferedReader sin = new BufferedReader(new InputStreamReader(
System.in));
PrintWriter os = new PrintWriter(socket.getOutputStream());
String client_line = null;
client_line = sin.readLine();
os.println(client_line + "\r\n\r\n");
os.flush();

System.out.println("Client:" + client_line);

// 从服务端程序接收数据

while (true) {
InputStream ips = socket.getInputStream();
InputStreamReader ipsr = new InputStreamReader(ips);
BufferedReader br = new BufferedReader(ipsr);
String s = null;
s = br.readLine();
while (!s.equals("bye")) {
String str[] = s.split("#");

String day = str[0];
String apwork = str[1];
String pmwork = str[2];
String scheme = str[3];

System.out.println("day:" + day);
System.out.println("apwork:" + apwork);
System.out.println("pmwork:" + pmwork);
System.out.println("scheme:" + scheme);
}
System.out.println("Server:" + s);
System.out.println("------------------------------");
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 向服务端程序发送数据
// OutputStream ops = socket.getOutputStream();
// OutputStreamWriter opsw = new OutputStreamWriter(ops);
// BufferedWriter bw = new BufferedWriter(opsw);
// bw.write("yy88\r\n\r\n");
// bw.flush();
}
}

lqsmn613 2009-11-04
  • 打赏
  • 举报
回复
这样吧,我还是把Server和Client的代码都贴出来吧,大家帮忙试试,看看有什么办法可以实现我需要的东西,谢谢啦!这两个是另外写的两个测试用的,大家把ip和数据库改下就好了。再谢!
Server:

package test;

import java.io.*;
import java.net.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import sun.misc.BASE64Encoder;

public class Server {

List list_day = new ArrayList();

List list_apwork = new ArrayList();

List list_pmwork = new ArrayList();

List list_scheme = new ArrayList();

public void login() {
ServerSocket server = null;
Socket socket = null;
String employeeid = null;

try {
server = new ServerSocket(6666);
while (true) {
employeeid = null;
socket = server.accept();
String client_line = null;
BufferedReader br = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
client_line = br.readLine();
String server_line = null;
String employee_name = null;
boolean bb = false;

System.out.println("client_line:" + client_line);
String str[] = client_line.split("#");
String name = str[0];
String pwd = str[1];

System.out.println("-----------------------------");
System.out.println(name);
System.out.println(pwd);
System.out.println("-----------------------------");

String pwd_md5 = null;
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
BASE64Encoder base64en = new BASE64Encoder();
pwd_md5 = base64en
.encode(md5.digest(pwd.getBytes("utf-8")));
} catch (NoSuchAlgorithmException e1) {
e1.printStackTrace();
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
System.out.println(pwd_md5);
try {
DB1 db = new DB1();
ResultSet rst = db
.qu("select * from t_acl_user where username = '"
+ name + "'");
while (rst.next()) {
employeeid = rst.getString("employeeid");
System.out.println(employeeid);
server_line = rst.getString("password");
System.out.println("server_line:" + server_line);
bb = true;
}
rst.close();
db.close();
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println(employeeid);
System.out.println("-----------------------");
if (bb == false) {
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream()));
bw.write("查无此号" + "\r\n\r\n");
bw.flush();
} else if (bb == true) {
if (pwd_md5.equals(server_line)) {
Date now_date = new Date();
int now_year = now_date.getYear() + 1900;
int now_month = now_date.getMonth();
String ss = now_year + "-" + now_month;
DB1 db = new DB1();
ResultSet rst;
try {
rst = db
.qu("select apwork,pmwork,scheme,day(commentdate) as day from t_day_comment where employeeid ='"
+ employeeid
+ "' and cast(year(commentdate) as varchar) + "
+ "'-' + cast(month(commentdate) as varchar) = '"
+ ss + "' order by day");
list_day = new ArrayList();
list_apwork = new ArrayList();
list_pmwork = new ArrayList();
list_scheme = new ArrayList();
while (rst.next()) {
list_day.add(rst.getString("day"));
list_apwork.add(rst.getString("apwork"));
list_pmwork.add(rst.getString("pmwork"));
list_scheme.add(rst.getString("scheme"));
}
} catch (SQLException e) {
e.printStackTrace();
}

BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(socket
.getOutputStream()));
for (int j = 0; j < list_day.size(); j++) {
String day = (String) list_day.get(j);
String apwork = (String) list_apwork.get(j);
String pmwork = (String) list_pmwork.get(j);
String scheme = (String) list_scheme.get(j);
String sw = day + "#" + apwork + "#" + pmwork + "#"
+ scheme;
System.out.println(sw);
System.out.println("-------------------------");

bw.write(sw + "\r\n\r\n");
bw.flush();
}

bw.write("bye" + "\r\n\r\n");
bw.flush();
} else if (!pwd_md5.equals(server_line)) {
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream()));
bw.write("密码错误" + "\r\n\r\n");
bw.flush();
}
}

}
} catch (IOException e) {
e.printStackTrace();
}
try {
socket.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
}

}

public static void main(String args[]) {
Server server = new Server();
server.login();
}
}

class DB1 {
Connection con;

Statement stt;

public void begin() throws SQLException {
if (con != null || stt != null) {
this.close();
}
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(
"jdbc:sqlserver://10.10.1.188:1433; DatabaseName=znoa",
"sa", "soft8099");
stt = con.createStatement();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e1) {
e1.printStackTrace();
}

}

public ResultSet qu(String sql) throws SQLException {
this.begin();
return stt.executeQuery(sql);
}

public boolean cun(String sql) throws SQLException {
this.begin();
return stt.execute(sql);
}

public int update(String sql) throws SQLException {
this.begin();
return stt.executeUpdate(sql);
}

public void close() throws SQLException {
stt.close();
con.close();
}

}
liangwansheng 2009-11-04
  • 打赏
  • 举报
回复
这地方学过,不过很长时间没用了,忘了。帮顶一下。
lqsmn613 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 java2000_net 的回复:]
你先搞好协议。
另外给个建议,客户端用2个线程
1 专门负责发送数据给服务器端
2 专门负责接收服务器端发来的数据,一直读取,没数据时会自动阻塞的
[/Quote]
线程,我明白的。至于协议,我那个应该是Tcp/Ip的吧。
这个东西没弄过,所以我现在写的都是根据一些网上的相关例子来写的,代码中也是通过ip地址来连接的哦。那应该就是Tcp/Ip协议的吧。
建议是不错,可是我的问题目前是想要解决哦。
老紫竹 2009-11-04
  • 打赏
  • 举报
回复
你先搞好协议。
另外给个建议,客户端用2个线程
1 专门负责发送数据给服务器端
2 专门负责接收服务器端发来的数据,一直读取,没数据时会自动阻塞的

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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