日期:2014-05-20  浏览次数:20729 次

关于JAVA网络编程,求指教!
我要完成这样一个需求,客户端像服务器端发送数据,服务器接收到数据后,在返回一个数据给客户端

下面是我写的代码:现在已经完成了客户端向服务器端发送数据,那么服务器端怎么像客户端发送数据呢
/**
 * 客户端
 */
package Client;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.rmi.UnknownHostException;
import java.util.Scanner;




import SSocket.SSocket;

import ChooseMpl.ChooseMpl;

public class ClientTest {

public static void main(String[] args) throws IOException {
Socket sk=null;
//接收用户的输入
System.out.println("欢迎使用在线迷你TXT小时管理器");
System.out.println("1.登录\n2.注册\n3.退出\n请选择:");
Scanner input = new Scanner(System.in);
int a=input.nextInt();//接收用户输入
/*
* 实现向服务器传送数据的操作
*/
InetAddress add=InetAddress.getLocalHost();
String ip=add.getHostAddress();//获得服务器IP,此处也就是本机ip
System.out.println(ip);//获得服务器IP,此处也就是本机ip
sk=new Socket(ip,8088);//向服务器的ip的8088端口发起连接请求
OutputStream out=sk.getOutputStream();//返回此套节字的输出流
PrintWriter os=new PrintWriter(out);//os对象是为了向服务器传入数据
os.print(a);
os.flush();//刷新
/**
* 接收服务器返回的数据
*/
PrintWriter oss=new PrintWriter(out);
BufferedReader is=new BufferedReader(new InputStreamReader(sk.getInputStream()));
//服务器返回数据
String res=is.readLine();
System.out.println(res);
String name=input.next();
System.out.println(name);
os.flush();//刷新
oss.flush();

//释放资源
os.close();
is.close();
oss.close();
}


}


/**
 * 线程类
 */
package SSocket;

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

public class SSocket extends Thread {
Socket sk=null;
public SSocket(Socket socket){
this.sk=socket;


public void run(){//定义线程的run方法
System.out.println("线程开始运行,此线程是会交替运行的");
//BufferedReader为输入流,用来接收客户端输入,或者服务器端输入
BufferedReader input;
//PrintWriter为输出流,用来发送客户端输出,或者服务器端输出
PrintWriter output;
try {//实现数据的接收和发送
input=new BufferedReader(new InputStreamReader(sk.getInputStream()));
output=new PrintWriter(sk.getOutputStream());
String msg=input.readLine();
//System.out.println("服务器接受客户端数据为:"+msg);
output.flush();//刷新数据
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
 * 服务器端
package Server;

import java.io.BufferedReader;

public class ServerTest extends HttpServlet {//需要继承自HttpServlet类
public static void main(String[] args) {
System.out.println("Socket服务器开始启动!");
ServerSocket ssk=null;
try {
//绑定端口,和客户端一致
ssk=new ServerSocket(8088);
while(true){//此时用while(true)的作用是为了让循环一直继续执行下去,也就是说只要客户端有输入,服务器都会不停的去接收客户端的数据
//调用方法接受客户端的请求,并返回Socket套节字,用client获取客户端所发送到信息
Socket client=ssk.accept();
//对client分析从中得到客户端的请求数据,BufferedReader用来从字符输入流中读取文本,客户端请求数据通过这行代码就被缓冲到了input对象中
BufferedReader input=new BufferedReader(new InputStreamReader(client.getInputStream()));
String msg=input.readLine();//得到input对象的值
System.out.println("服务器接收到的内容为:"+msg);
//添加线程SSocket
SSocket st=new SSocket(client);//将客户端的请求放入线程,需要创建SSocket线程
new Thread(st).start();//执行线程
 
String mes="冯硕";
//定义输出流,向客户端发送服务器返回的信息
byte[] buf = mes.getBytes();
// 确定发送方IP地址及端口号,地址为本地主机地址