socke 长连接,短连接 各位大哥,偶对长连接短连接理解不透彻,请给出个例子好吗? 还有同步异步也说说吧? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 长:connect连上后不断开, 进行N次收发操作.短:每次都connect, 完成任务后立即断开. 下次重连. 以A 和B连接为例:同步是说 A发信息给B后,B必须在确认发送完毕后才能给A回信息。而异步是指A 和B 可同时并发地通信。 这些都可以从网上看到啊,但是具体的实现呢?是不是这里设置啊ServerSocke socket = new ServerSocket(PORT);//假如没有这句话,就是长连接,//有的话就是短连接socket.setSoTimeout(50000);在这上面修改吧:package com.socket;import java.net.ServerSocket;/** * <p>Title: </p> * * <p>Description: </p> * * <p>Copyright: Copyright (c) 2005</p> * * <p>Company: </p> * * @author not attributable * @version 1.0 */public class TestServerSocket { public final static int PORT = 9000; public TestServerSocket() { } public static void main(String[] args) { ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(PORT); serverSocket.setSoTimeout(50); int i = 0 ; while (true) { new ServerThread(serverSocket.accept()); System.out.println("i=" + ++i); } } catch (Exception ex) { ex.printStackTrace(); } finally { } }}客户端的:package com.socket;import java.net.*;import java.io.*;/** * <p>Title: </p> * * <p>Description: </p> * * <p>Copyright: Copyright (c) 2005</p> * * <p>Company: </p> * * @author not attributable * @version 1.0 */public class ServerThread extends Thread { Socket socket = null; BufferedReader in = null; PrintWriter out = null; public ServerThread(Socket s) throws IOException{ socket = s; in = new BufferedReader(new InputStreamReader(socket.getInputStream())) ; out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); start(); } public void run(){ try { while (true) { String str = in.readLine(); if (str != null && str.equals("end")) { break; } out.println("From server=" + str); System.out.println("client=" + str); } //end while } catch (Exception ex) { ex.printStackTrace(); } finally { try { socket.close(); } catch (Exception ex) { ex.printStackTrace(); }//end try }//end try }} 客户端的:package com.socket;import java.net.*;import java.io.*;/** * <p>Title: </p> * * <p>Description: </p> * * <p>Copyright: Copyright (c) 2005</p> * * <p>Company: </p> * * @author not attributable * @version 1.0 */public class ClientSocket { public ClientSocket() { } public static void main(String[] args) { InetAddress address = null; Socket socket = null; BufferedReader in = null; PrintWriter out = null; try { address = InetAddress.getLocalHost(); socket = new Socket(address, 9000); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); //input from console BufferedReader console = new BufferedReader(new InputStreamReader(System.in)); for(;;){ String consoleIn = console.readLine(); out.write(consoleIn); out.flush(); if (consoleIn != null && consoleIn.equals("end")) { break ; } String read = in.readLine(); System.out.println("From server=" + read); }//end for// for (int i = 0; i < 10; i++) {// out.println("hello" + i);// System.out.println(in.readLine());// }//end for } catch (Exception ex) { ex.printStackTrace(); } finally { try{ in.close(); out.close(); socket.close(); }catch(Exception ex){ ex.printStackTrace(); } } }} //socket.setSoTimeout(50000);这是设置超时而已 “短:每次都connect, 完成任务后立即断开. 下次重连.“这句话在上面的代码中,如何实现呢? 大概流程如:int doSomething(){ new Socket(); connect(ip,port); doTransaction(); //send and recv close();}多次调用这样的函数, 每次调用都是一次"连接-交易-断开"的过程.另外,短连接/长连接是相对的, 通常做几个交互(收发)就断开可以看做短连接. 大哥,具体一些啊?是不是短连接就是在上面的客户端中,去掉for(;;),的部分,然socket关掉。下次连接的时候,再用。 jdom&xml 关于Char问题 编五子棋程序时遇到点问题? 谁有 IntelliJ IDEA 4.0.3 注册机!!100分!! 我正在开发的小工具,关于JNI的。不知大家是否感兴趣 菜人问题:问一个jdk-doc的问提 赠送100分:请高手来看看关于线程的问题 JTable的问题 小女子我又回来问问题了!!!!! 简单问题,问题简简单单 急阿,请问抛出java.io.EOFException异常如何解决??? Vector和ArrayList的异同
短:每次都connect, 完成任务后立即断开. 下次重连.
同步是说 A发信息给B后,B必须在确认发送完毕后才能给A回信息。
而异步是指A 和B 可同时并发地通信。
是不是这里设置啊
ServerSocke socket = new ServerSocket(PORT);
//假如没有这句话,就是长连接,
//有的话就是短连接
socket.setSoTimeout(50000);
在这上面修改吧:
package com.socket;import java.net.ServerSocket;/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2005</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class TestServerSocket {
public final static int PORT = 9000;
public TestServerSocket() {
} public static void main(String[] args) {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(PORT);
serverSocket.setSoTimeout(50);
int i = 0 ;
while (true) {
new ServerThread(serverSocket.accept());
System.out.println("i=" + ++i);
}
}
catch (Exception ex) {
ex.printStackTrace();
}
finally { }
}
}
客户端的:
package com.socket;
import java.net.*;
import java.io.*;/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2005</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class ServerThread
extends Thread {
Socket socket = null;
BufferedReader in = null;
PrintWriter out = null;
public ServerThread(Socket s) throws IOException{
socket = s;
in = new BufferedReader(new InputStreamReader(socket.getInputStream())) ;
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
start();
}
public void run(){
try {
while (true) {
String str = in.readLine();
if (str != null && str.equals("end")) {
break;
}
out.println("From server=" + str);
System.out.println("client=" + str);
} //end while
}
catch (Exception ex) {
ex.printStackTrace();
}
finally {
try {
socket.close();
}
catch (Exception ex) {
ex.printStackTrace();
}//end try
}//end try
}
}
import java.io.*;/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2005</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class ClientSocket {
public ClientSocket() {
} public static void main(String[] args) {
InetAddress address = null;
Socket socket = null;
BufferedReader in = null;
PrintWriter out = null;
try {
address = InetAddress.getLocalHost();
socket = new Socket(address, 9000);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
//input from console
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
for(;;){
String consoleIn = console.readLine();
out.write(consoleIn);
out.flush();
if (consoleIn != null && consoleIn.equals("end")) {
break ;
}
String read = in.readLine();
System.out.println("From server=" + read); }//end for
// for (int i = 0; i < 10; i++) {
// out.println("hello" + i);
// System.out.println(in.readLine());
// }//end for }
catch (Exception ex) {
ex.printStackTrace();
}
finally {
try{
in.close();
out.close();
socket.close();
}catch(Exception ex){
ex.printStackTrace();
}
} }
}
这句话在上面的代码中,如何实现呢?
int doSomething(){
new Socket();
connect(ip,port);
doTransaction(); //send and recv
close();
}
多次调用这样的函数, 每次调用都是一次"连接-交易-断开"的过程.另外,短连接/长连接是相对的, 通常做几个交互(收发)就断开可以看做短连接.