一个关于Socket的问题 大家好,我现在已经有了一个服务器端,现在要做个客户端,客户端打开一个SOCKET连接后该怎么做呢?如何监听?比方说我在客户端得到一个用户名和密码信息,然后我打开一个SOCKET连接,发送给服务端,服务端接受信息后,去数据库核对,正确的就发送一个信息回来,那客户端如何监听有服务器端发来的信息呢?具体的步骤和思路大概是怎么样子的?谢谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 此回复为自动发出,仅用于显示而已,并无任何其他特殊作用楼主【duck991】截止到2008-07-16 15:58:30的历史汇总数据(不包括此帖):发帖的总数量:22 发帖的总分数:380 每贴平均分数:17 回帖的总数量:11 得分贴总数量:1 回帖的得分率:9% 结贴的总数量:14 结贴的总分数:220 无满意结贴数:3 无满意结贴分:60 未结的帖子数:8 未结的总分数:160 结贴的百分比:63.64 % 结分的百分比:57.89 % 无满意结贴率:21.43 % 无满意结分率:27.27 % 楼主加油 Socket clientSocket = new Socket("merlin", 80); DataOutputStream outbound = new DataOutputStream(clientSocket.getOutputStream() );DataInputStream inbound = new DataInputStream( clientSocket.getInputStream());一旦流建立了,一般的流操作就可以做了:outbound.writeBytes("GET / HTTP/1.0 );String responseLine;while ( (responseLine = inbound.readLine()) != null){System.out.println(responseLine);} outbound.close();inbound.close();clientSocket.close(); 主要靠Socket.getOutputStream和Socket.getInputStream 底层通信,最好在TCP的基础上再封装一层协议比较好.如果不封装的话,就要用TCP短连接的形式了.客户端,其实并不是Socket的端口监听.而是输入缓冲区的监听,可以写一个线程,每隔几毫秒判断一下缓冲区是否有数据,有就读取出来.这样就可以了.要发送数据,记得要刷新(flush)缓冲区. //服务端 public synchronized void receiveRequest(Socket socket) { //String str){ this.socket = socket; try { //接收请求 ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); reception = (ArrayList) ois.readObject(); /** *数据库核对方法 */ //服务端反馈发送 ObjectOutputStream oos = new ObjectOutputStream(socket. getOutputStream()); oos.writeObject(rj.getsend());//rj.getsend()反馈的信息 oos.flush(); oos.close(); ois.close(); socket.close(); } catch (Exception e) { e.printStackTrace(); } //this.queue.add(reception); //this.queue.add(str); }//客户端public void login() { try { Socket socket = new Socket("192.168.0.1", 8083); //socket.setSoTimeout(1000);//设置连接超时 //发送请求 ObjectOutputStream oos = new ObjectOutputStream(socket. getOutputStream()); oos.writeObject(obj_send);//obj_send发送的数据 oos.flush(); da.removeValue(); //接收服务端反馈 ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); ArrayList al = (ArrayList) ois.readObject(); String jud = al.get(0).toString(); if (info.equals(jud)) { JOptionPane.showMessageDialog(null, "接受成功", "恭喜", JOptionPane.INFORMATION_MESSAGE); } oos.close(); ois.close(); socket.close(); } catch (Exception ex) { ex.printStackTrace(); JOptionPane.showMessageDialog(null, "无法连接服务器", "错误", JOptionPane.ERROR_MESSAGE); System.exit(0); } } 客户端中的da.removeValue();扔掉咯 通过socket,获取InputStream,再readXXX()一次就行了Client--> (socket) <--Server 有高手么?帮忙翻译下这段C语言! java截取一篇文章的第一个段落 为什么会出现越界? 关于LOG4J设置子类的问题~~~ 求教这个字符串的格式化问题,JAVA有没有提供现成的API? readObject的问题 新手的问题 我的程序为什么需要Tomcat重启一次后再能正常运行?(jsp+javaBeans+Oracle) jbuilder4在linux下的问题. 找不到合适的构造器 C:\Program Files\Java\jre1.6.0\lib\rt 这个目录是不是就是 import 进来的所有字节码存放所在地?? java新手提问,关于数组
楼主【duck991】截止到2008-07-16 15:58:30的历史汇总数据(不包括此帖):
发帖的总数量:22 发帖的总分数:380 每贴平均分数:17
回帖的总数量:11 得分贴总数量:1 回帖的得分率:9%
结贴的总数量:14 结贴的总分数:220
无满意结贴数:3 无满意结贴分:60
未结的帖子数:8 未结的总分数:160
结贴的百分比:63.64 % 结分的百分比:57.89 %
无满意结贴率:21.43 % 无满意结分率:27.27 %
楼主加油
DataOutputStream outbound = new DataOutputStream(
clientSocket.getOutputStream() );
DataInputStream inbound = new DataInputStream( clientSocket.getInputStream()
);一旦流建立了,一般的流操作就可以做了:outbound.writeBytes("GET / HTTP/1.0 );
String responseLine;
while ( (responseLine = inbound.readLine()) != null)
{
System.out.println(responseLine);
}
outbound.close();
inbound.close();
clientSocket.close();
如果不封装的话,就要用TCP短连接的形式了.客户端,其实并不是Socket的端口监听.而是输入缓冲区的监听,可以写一个线程,每隔几毫秒判断一下缓冲区是否有数据,有就读取出来.这样就可以了.要发送数据,记得要刷新(flush)缓冲区.
//服务端
public synchronized void receiveRequest(Socket socket) { //String str){
this.socket = socket;
try {
//接收请求
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
reception = (ArrayList) ois.readObject(); /**
*数据库核对方法
*/ //服务端反馈发送
ObjectOutputStream oos = new ObjectOutputStream(socket.
getOutputStream());
oos.writeObject(rj.getsend());//rj.getsend()反馈的信息
oos.flush();
oos.close();
ois.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
//this.queue.add(reception);
//this.queue.add(str);
}
//客户端
public void login() {
try {
Socket socket = new Socket("192.168.0.1", 8083);
//socket.setSoTimeout(1000);//设置连接超时
//发送请求
ObjectOutputStream oos = new ObjectOutputStream(socket.
getOutputStream());
oos.writeObject(obj_send);//obj_send发送的数据
oos.flush();
da.removeValue();
//接收服务端反馈
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
ArrayList al = (ArrayList) ois.readObject();
String jud = al.get(0).toString();
if (info.equals(jud)) {
JOptionPane.showMessageDialog(null, "接受成功", "恭喜",
JOptionPane.INFORMATION_MESSAGE);
}
oos.close();
ois.close();
socket.close();
} catch (Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "无法连接服务器", "错误",
JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
}
Client--> (socket) <--Server