如何利用链表发送套接字

condeywadl 2008-10-10 10:35:33
最好能给个例子 用链表做缓冲 例子写的简单点 本人第一次接触这个东西 谢谢了
...全文
76 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
condeywadl 2008-10-12
  • 打赏
  • 举报
回复
非常感谢! 不过我还是需要用链表做缓冲
lshaohe 2008-10-10
  • 打赏
  • 举报
回复
用链表做缓冲?

期待答案
up
charles_wang8888 2008-10-10
  • 打赏
  • 举报
回复
随手编写了一个单SERVER,多个CLIENT的套接字。和楼主分享下

服务器部分


/**
*
*/
package clientservermodel2;

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

/**
* @author super
*
*/
public class MultiplyServer {

/**
* @param args
*/
//public static final int MAX_THREADS = 20;
public static final int PORT= 1995;

public static void main(String[] args) {
// TODO Auto-generated method stub

try{
//产生一个ServerSocket
ServerSocket serverSocket = new ServerSocket(PORT);
System.out.println("A server is established..");
try{
//产生一Socket 对象,用它来处理和客户端的交互
//int i=0;
while(true){
Socket s = serverSocket.accept();

ConnectionHandler handler = new ConnectionHandler(s);


}
}
finally{
serverSocket.close();
}
}catch(IOException e){
e.printStackTrace();
}
}

}

//专门设计一个线程类来处理和客户端的交互
class ConnectionHandler extends Thread{
private Socket handlerSocket ;
private PrintWriter out;
private BufferedReader in;

public ConnectionHandler(Socket s){
handlerSocket = s;
try{
//从这个套接字中分离出输入流和输出流
out = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(s.getOutputStream())),true);
in = new BufferedReader(
new InputStreamReader(s.getInputStream()));
}catch(Exception e){
e.printStackTrace();
}
start();//调用RUN 方法
}

public void run(){
System.out.println("Beginning dealing with interaction.....");
try{
//由于这个线程不知道到底处理多少次,所以只能用while形式的循环
while(true){
String str = in.readLine();
//分析读入的内容
if(str.equals("END"))
break;
//否则,加上内容之后返回
System.out.println(str);
out.println("Echo # "+str);
}
}catch(Exception e){
e.printStackTrace(System.err);
}
finally{
//回收这个打开的套接字
try{
handlerSocket.close();
}catch(Exception e){
e.printStackTrace(System.err);
}
}
}

}



客户端部分


/**
*
*/
package clientservermodel2;


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

/**
* @author super
*
*/
public class MultiplyClient {

/**
* @param args
*/
//所有的客户端的SOCKET 需要的信息应该在这个大类里面提供

public static final int MAX_THREADS = 19;
public static void main(String[] args) {
// TODO Auto-generated method stub

try{
InetAddress addr = InetAddress.getByName(null);
//ClientSocket socket = new ClientSocket(addr,MultiplyServer.PORT);
int i = 0;
while ( i<MAX_THREADS ){
ClientSocket socket = new ClientSocket(addr,MultiplyServer.PORT);
socket.sleep(100);
i++;
}
}catch(Exception e){
e.printStackTrace();
}

}

}

//专门的一个套接字类来处理和服务器端的连接
class ClientSocket extends Thread{

private BufferedReader in;
private PrintWriter out;
private Socket s;
public ClientSocket(InetAddress addr,int PORT)
{
try{
s = new Socket(addr,PORT);
//分离出输入端和输出端
in = new BufferedReader(
new InputStreamReader(s.getInputStream()));
out = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(s.getOutputStream())),true);

//让其调用run
this.start();
// s.close();
}catch(Exception e){
e.printStackTrace();
}
}

public void run(){
try{
for(int i=0;i<15;i++){
//输入内容
out.println("Message +# "+i);
//读入返回的内容
String str = in.readLine();
System.out.println(str);
}
out.println("END");
}
catch(Exception e){
e.printStackTrace();
}
finally{
try{
s.close();
}catch(IOException e){
System.err.println("Can not close socket of client");
}
}
}
}



算是个套接字用法的例子吧,编的比较粗糙,呵呵
malligator 2008-10-10
  • 打赏
  • 举报
回复
^

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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