首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

关于Socket的异步的有关问题~

2013-07-16 
关于Socket的异步的问题~!我只能写成服务器发一句客户端发一句,,看哪位大神给我改改·,,我的服务器端代码:i

关于Socket的异步的问题~!
我只能写成服务器发一句客户端发一句,,看哪位大神给我改改·,,
我的服务器端代码:


import java.net.*;
import java.io.*;
public class server {

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
server s=new server();

}
public server(){

try {
//在9999端口监听
ServerSocket ss=new ServerSocket(9999);
System.out.println("服务器在9999监听。。。");
//等待连接
Socket s=ss.accept();


//接收 客服端发来的消息
InputStreamReader isr=new InputStreamReader(s.getInputStream());
BufferedReader br=new BufferedReader(isr);

//给控制台写的东西给客户端
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);

//接收从控制台输入的信息
InputStreamReader isr2=new InputStreamReader(System.in);
BufferedReader br2=new BufferedReader(isr2);

while(true){
String infoFromClinent=br.readLine();

System.out.println("客户端发来:"+infoFromClinent);

//接收从控制台接收的信息
System.out.println("请输入你对客户端说的话");
String response=br2.readLine();
//把控制台的信息给客服端
pw.println(response);
}

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}


客服端代码:

import java.net.*;
import java.io.*;
public class client {

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
client c=new client();
}
public client(){
try {
//连接服务器
Socket s=new Socket("127.0.0.1",9999);

PrintWriter pw=new PrintWriter(s.getOutputStream(),true);

InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);

InputStreamReader isr2=new InputStreamReader(s.getInputStream());
BufferedReader br2=new BufferedReader(isr2);

while(true){

System.out.println("请输入你想对服务器说的话:");
//客户端从控制台接收
String info=br.readLine();
pw.println(info);

//接收从服务器发来的话
String res=br2.readLine();
System.out.println("服务器说:"+res);

}


} catch (UnknownHostException e) {
// TODO Auto-generated catch block


e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

改成异步的哟~?或者说我没理解异步··能给我简单的解释解释,,怎么把这个例子改成异步,或者改成客户端可以发很多次,和服务器端发很多次,都能收到的情况,大神,求教导 socket 服务器 JAVA
[解决办法]
在服务端每接收一个请求就new一个线程去处理。
[解决办法]
看看下面的博客:
http://www.blogjava.net/sterning/archive/2007/10/15/152940.html
[解决办法]
服务器端代码:

package org.zhangming.net;

import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer
{
public static void main(String[] args) throws Exception
{
//监听500端口
ServerSocket ss = new ServerSocket(500);

//定义为无限循环,让服务器端一直接收消息
while(true)
{
//等待连接
Socket socket = ss.accept();
//启动接收消息的线程
new InputThread(socket).start();
//启动发送消息的线程
new OutputThread(socket).start();
}

}
}


客户端代码:
package org.zhangming.net;

import java.net.Socket;

public class TCPClient
{
public static void main(String[] args) throws Exception
{
Socket socket = new Socket("localhost",500);//连接服务器

new InputThread(socket).start();
new OutputThread(socket).start();
}
}


接收消息的线程:
package org.zhangming.net;

import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

public class InputThread extends Thread
{
private Socket socket;

//获得相应的socket,用于操作消息的接收
public InputThread(Socket socket)
{
this.socket = socket;
}

@Override
public void run()
{
try
{
//接收消息
InputStream is = socket.getInputStream();


while(true)
{
byte[] buf = new byte[1024];
int len  = is.read(buf);
System.out.println(new String(buf,0,len));
}
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
发送消息的线程:

package org.zhangming.net;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class OutputThread extends Thread
{
private Socket socket;

//获得相应的socket,用于操作消息的发送
public OutputThread(Socket socket)
{
this.socket = socket;
}

//发送消息
@Override
public void run()
{
try
{
OutputStream os = socket.getOutputStream();
while (true)
{
//接收从控制台输入的消息
BufferedReader reader = new BufferedReader(
new InputStreamReader(System.in));
//每次读一行(从命令行)
String str = reader.readLine();

//将消息写进消息发送的输出流中
os.write(str.getBytes());
}
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


热点排行