您的位置:首页 > Web前端 > JavaScript

实现客户端与服务端之间传输json数据

2017-07-18 23:25 295 查看
需求:用户在客户端输入用户名,密码,服务端获取数据后,把这个用户的用户名和密码写入数据库,以完成注册。

步骤:

1. 创建数据库,并创建表。
2. 利用myeclipse创建新工程,利用JDBC实现java操纵数据库。
3. 实现客户端类,服务端类。


具体实现:

1.创建数据表

create table usertable
(
username VARCHAR(20),
pawd VARCHAR(20)
);


2.利用JDBC实现java操纵数据库

public class DBUtil {
private static final String url="jdbc:mysql://localhost/user?characterEncoding=utf8&useSSL=false";//主机名,密码等信息
private static final String name="your databasename";//数据库用户名
private static final String password="your password";//数据库密码


private Connection connection=null;
static
{

try {
Class.forName("com.mysql.jdbc.Driver");//首先要加载一个驱动类

connection=DriverManager.getConnection(url, name, password);

} catch (ClassNotFoundException e) {
e.printStackTrace();
}

}
public static Connection connect() throws SQLException
{

return DriverManager.getConnection(url, name, password);
}

}


3.实现客户端类

package com.timmy.main;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

import net.sf.json.JSONObject;

public class Client {

public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket=new Socket("localhost",8888);//客户端socket,用来发送数据。
OutputStream outputStream=socket.getOutputStream();
//PrintWriter pWriter=new PrintWriter(outputStream);
//创建json格式数据
JSONObject jsonObject=new JSONObject();
//填充json数据内容
jsonObject.put("username", "kongxiangyue");
jsonObject.put("password", "123456");
//json转化成字符串
String string=jsonObject.toString();
//字符串转化byte数组
byte[] bytes=string.getBytes();
//发送json数据
//pWriter.write(bytes);
outputStream.write(bytes);
outputStream.flush();//刷新,向服务器发送信息;
//pWriter.
//pWriter.flush();
socket.shutdownOutput();

//pWriter.close();
outputStream.close();
socket.close();

int port =socket.getLocalPort();
System.out.println(port);

ServerSocket serverSocket=new ServerSocket(port);

Socket socket1=serverSocket.accept();

InputStream is=socket1.getInputStream();
InputStreamReader inr =new InputStreamReader(is);
BufferedReader bReader=new BufferedReader(inr);
String data = bReader.readLine();
while(data!=null)
{
System.out.println("数据是:"+data);
data=bReader.readLine();
}

socket1.shutdownInput();
bReader.close();
inr.close();
is.close();
socket1.close();
}

}


实现服务端类

package com.timmy.main;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import net.sf.json.JSON;
import net.sf.json.JSONObject;

import com.timmy.util.DBUtil;

public class main {

public static void main(String[] args) {
try {
ServerSocket serverSocket=new ServerSocket(8888);//绑定端口号
System.out.println("***服务器已经打开***");//提示信息
Socket socket=null;//
Integer count=0;
socket=serverSocket.accept();//这个socket用来读取接受的数据

DataInputStream inputStream = null;  //数据输入流
DataOutputStream outputStream = null;  //数据输出流
String strInputstream ="";

inputStream =new DataInputStream(socket.getInputStream());
ByteArrayOutputStream baos = new ByteArrayOutputStream();  // 可以捕获内存缓冲区的数据,转换成字节数组
byte[] by = new byte[2048];
int n;
while((n=inputStream.read(by))!=-1){  //将流中的数据缓冲到字节数组中去,如果没到末尾返回的是真实个数,到末尾时,返回的是-1;
baos.write(by,0,n);    //readline将会把json格式破坏掉
}
strInputstream = new String(baos.toByteArray());
socket.shutdownInput();
baos.close();

JSONObject jsonObject=JSONObject.fromObject(strInputstream);
String username=jsonObject.optString("username");
String password=jsonObject.optString("password");
System.out.println(jsonObject.toString());

Connection connection=DBUtil.connect();
String sql="insert into usertable values(?,?)";

PreparedStatement ptmt=connection.prepareStatement(sql);
ptmt.setString(1, username);
ptmt.setString(2, password);
ptmt.execute();

//服务器响应客户端
int port =socket.getPort();
System.out.println(port);

Socket socket1=new Socket("localhost",port);
OutputStream os = socket1.getOutputStream();
PrintWriter pw =new PrintWriter(os);
pw.write("数据已录入数据库");
pw.flush();
socket1.shutdownOutput();
pw.close();
os.close();
socket1.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐