java socket编程,客户端发出检索字段,服务端查询数据并返回结果集
2014-04-26 21:48
691 查看
1.服务器端
/**
*
*/
import java.io.*;
import java.net.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;
import java.util.concurrent.*;
import com.mysql.jdbc.PreparedStatement;
/**
* @author linzhifeng
*
*/
public class Server{
//服务器端 需要单独编译并在命令行模式下启动测试
public static final String DBDRIVER = "com.mysql.jdbc.Driver";
public static final String DBURL = "jdbc:mysql://localhost:3306/jdbc";
public static final String DBUSER = "root";
public static final String DBPASSWORD = "123456";
private static final int SERVERPORT = 54323; //服务器端口
private static List<Socket> mClientList = new ArrayList<Socket>(); //客户端连接 通过List来储存所有连接进来的客户端的Socket对象(也可用CopyOnWriteArrayList来储存)
private ExecutorService mExecutorService; //线程池 需要为每个客户端都开启一个线程
private ServerSocket mServerSocket; //ServerSocket对象
public static void main(String[] args){ //main方法 开启服务器
new Server();
}
public Server(){
try{
mServerSocket = new ServerSocket(SERVERPORT);//设置服务器端口
mExecutorService = Executors.newCachedThreadPool();//创建一个线程池
System.out.println("start...");
Socket client = null;//用来临时保存客户端连接的Socket对象
while (true){
client = mServerSocket.accept(); //接收客户连接并添加到list中
mClientList.add(client);
mExecutorService.execute(new ThreadServer(client));//开启一个客户端线程
}
}catch (IOException e){
e.printStackTrace();
}
}
static class ThreadServer implements Runnable{//每个客户端单独开启一个线程
private Socket mSocket;
private BufferedReader mBufferedReader;
private PrintWriter mPrintWriter;
private String mStrMSG;
public ThreadServer(Socket socket) throws IOException{
this.mSocket = socket;
mBufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
mStrMSG = "user:"+this.mSocket.getInetAddress()+" come total:" + mClientList.size();
sendMessage();
}
public void run(){
try{
while ((mStrMSG = mBufferedReader.readLine()) != null){
if (mStrMSG.trim().equals("exit")){
//当一个客户端退出时
mClientList.remove(mSocket);
mBufferedReader.close();
mPrintWriter.close();
mStrMSG = "user:"+this.mSocket.getInetAddress()+" exit total:" + mClientList.size();
mSocket.close();
sendMessage();
break;
}else{
String name=mStrMSG;
mStrMSG = mSocket.getInetAddress() + ":" + mStrMSG;
Connection con = null;
try {
Class.forName(DBDRIVER);
con = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);
Statement str = con.createStatement();
//String name="china";
String sql = "select id from test where country = '"+name+"' limit 0,10";
PreparedStatement st = (PreparedStatement) con.prepareStatement(sql);
java.sql.ResultSet rs=null;
rs = st.executeQuery(sql);
while(rs.next()){
System.out.println(rs.getString("id"));
mStrMSG+="|"+rs.getString("id");
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sendMessage();
}
}
}catch (IOException e){
e.printStackTrace();
}
}
private void sendMessage() throws IOException{//发送消息给所有客户端
System.out.println(mStrMSG);
for (Socket client : mClientList){
mPrintWriter = new PrintWriter(client.getOutputStream(), true);
mPrintWriter.println(mStrMSG);
}
}
}
}
2.客户端
/**
*
*/
package HTTP;
import java.io.*;
import java.net.Socket;
import java.util.concurrent.*;
/**
* @author linzhifeng
*
*/
public class client{//需要单独编译并在命令行模式下启动测试
private static final int PORT = 54323;
private static ExecutorService exec = Executors.newCachedThreadPool();
public static void main(String[] args) throws Exception{
new client();
}
public client(){
try{
Socket socket = new Socket("127.0.0.1", PORT);
exec.execute(new Sender(socket));
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg;
while ((msg = br.readLine()) != null){
System.out.println(msg);
}
}catch (Exception e){
}
}
static class Sender implements Runnable{//客户端线程获取控制台输入消息
private Socket socket;
public Sender(Socket socket){
this.socket = socket;
}
public void run(){
try{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
String msg;
while (true){
msg = br.readLine();
pw.println(msg);
if (msg.trim().equals("exit")){
pw.close();
br.close();
exec.shutdownNow();<
4000
br />
break;
}
}
}catch (Exception e){
e.printStackTrace();
}
}
}
}
3.cmd下编译运行服务器
javac -cp mysql-connector-java-5.0.8-bin.jar ./Server.java
java -cp mysql-connector-java-5.0.8-bin.jar Server
/**
*
*/
import java.io.*;
import java.net.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;
import java.util.concurrent.*;
import com.mysql.jdbc.PreparedStatement;
/**
* @author linzhifeng
*
*/
public class Server{
//服务器端 需要单独编译并在命令行模式下启动测试
public static final String DBDRIVER = "com.mysql.jdbc.Driver";
public static final String DBURL = "jdbc:mysql://localhost:3306/jdbc";
public static final String DBUSER = "root";
public static final String DBPASSWORD = "123456";
private static final int SERVERPORT = 54323; //服务器端口
private static List<Socket> mClientList = new ArrayList<Socket>(); //客户端连接 通过List来储存所有连接进来的客户端的Socket对象(也可用CopyOnWriteArrayList来储存)
private ExecutorService mExecutorService; //线程池 需要为每个客户端都开启一个线程
private ServerSocket mServerSocket; //ServerSocket对象
public static void main(String[] args){ //main方法 开启服务器
new Server();
}
public Server(){
try{
mServerSocket = new ServerSocket(SERVERPORT);//设置服务器端口
mExecutorService = Executors.newCachedThreadPool();//创建一个线程池
System.out.println("start...");
Socket client = null;//用来临时保存客户端连接的Socket对象
while (true){
client = mServerSocket.accept(); //接收客户连接并添加到list中
mClientList.add(client);
mExecutorService.execute(new ThreadServer(client));//开启一个客户端线程
}
}catch (IOException e){
e.printStackTrace();
}
}
static class ThreadServer implements Runnable{//每个客户端单独开启一个线程
private Socket mSocket;
private BufferedReader mBufferedReader;
private PrintWriter mPrintWriter;
private String mStrMSG;
public ThreadServer(Socket socket) throws IOException{
this.mSocket = socket;
mBufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
mStrMSG = "user:"+this.mSocket.getInetAddress()+" come total:" + mClientList.size();
sendMessage();
}
public void run(){
try{
while ((mStrMSG = mBufferedReader.readLine()) != null){
if (mStrMSG.trim().equals("exit")){
//当一个客户端退出时
mClientList.remove(mSocket);
mBufferedReader.close();
mPrintWriter.close();
mStrMSG = "user:"+this.mSocket.getInetAddress()+" exit total:" + mClientList.size();
mSocket.close();
sendMessage();
break;
}else{
String name=mStrMSG;
mStrMSG = mSocket.getInetAddress() + ":" + mStrMSG;
Connection con = null;
try {
Class.forName(DBDRIVER);
con = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);
Statement str = con.createStatement();
//String name="china";
String sql = "select id from test where country = '"+name+"' limit 0,10";
PreparedStatement st = (PreparedStatement) con.prepareStatement(sql);
java.sql.ResultSet rs=null;
rs = st.executeQuery(sql);
while(rs.next()){
System.out.println(rs.getString("id"));
mStrMSG+="|"+rs.getString("id");
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sendMessage();
}
}
}catch (IOException e){
e.printStackTrace();
}
}
private void sendMessage() throws IOException{//发送消息给所有客户端
System.out.println(mStrMSG);
for (Socket client : mClientList){
mPrintWriter = new PrintWriter(client.getOutputStream(), true);
mPrintWriter.println(mStrMSG);
}
}
}
}
2.客户端
/**
*
*/
package HTTP;
import java.io.*;
import java.net.Socket;
import java.util.concurrent.*;
/**
* @author linzhifeng
*
*/
public class client{//需要单独编译并在命令行模式下启动测试
private static final int PORT = 54323;
private static ExecutorService exec = Executors.newCachedThreadPool();
public static void main(String[] args) throws Exception{
new client();
}
public client(){
try{
Socket socket = new Socket("127.0.0.1", PORT);
exec.execute(new Sender(socket));
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg;
while ((msg = br.readLine()) != null){
System.out.println(msg);
}
}catch (Exception e){
}
}
static class Sender implements Runnable{//客户端线程获取控制台输入消息
private Socket socket;
public Sender(Socket socket){
this.socket = socket;
}
public void run(){
try{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
String msg;
while (true){
msg = br.readLine();
pw.println(msg);
if (msg.trim().equals("exit")){
pw.close();
br.close();
exec.shutdownNow();<
4000
br />
break;
}
}
}catch (Exception e){
e.printStackTrace();
}
}
}
}
3.cmd下编译运行服务器
javac -cp mysql-connector-java-5.0.8-bin.jar ./Server.java
java -cp mysql-connector-java-5.0.8-bin.jar Server
相关文章推荐
- 黑马程序员_Java基础_网络编程_客户端服务端数据传输,交互,客户端请求服务原理,自定义浏览器,URL统一资源定位符
- JAVA_WEB项目之Lucene实现检索结果排序和关键字在索引库中多字段查询结果进行高亮显示
- JAVA 网络编程 Socket 详细说明,实现客户端和服务端相互推送消息
- JAVA实践-mybatis中junit查询无结果返回,数据库查询有数据
- java网络编程--socket服务端客户端(1:1)
- Java Socket 服务端发送数据 客户端接收数据
- socket客户端发送数据给服务端,服务端排序后返回
- java网络编程(一)使用TCP协议完成客户端与服务端的数据传递
- java网络编程之服务端客户端socket简单通信案例
- java网络编程(一)使用TCP协议完成客户端与服务端的数据传递
- 网络编程(15)—— 实现利用管道保存客户端数据的socket服务端
- socket客户端发送数据给服务端,服务端排序后返回
- 分享:Java socket ,多客户端同时与服务端不停的交换数据
- ios socket编程初步:iphone客户端与java服务端通信
- 猎豹MFC--Socket编程基础TCP服务端和客户端
- Socket编程如何实现服务器端接收客户端数据
- Java中利用socket实现简单的服务端与客户端的通信(中级)——实现任意双向通信
- 初识安卓之服务:客户端绑定服务和服务端如何返回客户请求的结果
- Java-Socket接收服务端数据--中文乱码
- 通过HTTP方式获取URL返回结果数据(Java)