您的位置:首页 > 编程语言

编程1

2015-09-07 16:07 330 查看
public class ClientLogin {

public static void main(String[] args) {

test1();
}

/*
* 以对象流的方式发送请求和响应
*/
private static void test2() {
try {
//创建一个指定连接主机地址和端口号的Socket对象建立连接
Socket socke = new Socket("localhost", 8899);
//打开socke关联的输出流
OutputStream os = socke.getOutputStream();
//创建人类对象
Person p = new Person("单身狗", 28, "5楼2教室");
//创建对象输出流
ObjectOutputStream oos = new ObjectOutputStream(os);
//对人类对象进行序列化,以序列化的方式发送到服务器端
oos.writeObject(p);
//刷新对象流,以免有内容存留置在管道里
oos.flush();
//关闭输出流
socke.shutdownOutput();

//接收服务器端的响应
InputStream is = socke.getInputStream(); //打开socke关联的输入流
//创建对象输入流
ObjectInputStream ois = new ObjectInputStream(is);
Person pp = (Person)ois.readObject(); //实现反序列化,用来接收服务器端的响应信息
System.out.println("服务器信息如下:姓名:"+pp.getName()+";年龄:"+pp.getAge()+";地址:"+pp.getAddress());

//释放资源
ois.close();
oos.close();
socke.close();

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


}

public class LoginServer {

public static void main(String[] args) {

try {

//1.创建一个服务器端的socket对象,并且指定端口号来接收客户端的请求

ServerSocket server = new ServerSocket(8899);

Socket socket;

int num = 1;

while(true){

//2.开始监听请求

socket = server.accept();

new Thread(new ThreadSocket(socket)).start(); //响应

//3.获得输入流,获得用户的请求信息

InputStream is = socket.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(is));

String info = br.readLine();

while(info!=null){

System.out.println(“您是第”+num+”个用户:信息如下:”+info+”\tIP地址是:”+socket.getInetAddress().getHostAddress());

info = br.readLine();

}

num++;

}

} catch (IOException e) {

e.printStackTrace();

}

}

/*
* 以对象流的方法接收请求和响应
*/
private static void test2() {
ServerSocket server;
try {
//1.创建一个服务器端的socket对象,并且指定端口号来接收客户端的请求
server = new ServerSocket(8899);
//2.开始监听请求
Socket socket = server.accept();
//获得socket关联的输出流
InputStream is = socket.getInputStream();
//创建对象输入流
ObjectInputStream ois = new ObjectInputStream(is);
//实现反序列化,用来接收客户端的请求信息
Person p = (Person)ois.readObject();
System.out.println("客户信息如下:姓名:"+p.getName()+";年龄:"+p.getAge()+";地址:"+p.getAddress());

//响应
OutputStream os = socket.getOutputStream();//打开socke关联的输出流
Person pp = new Person("单身猫", 18, "5楼3教室"); //创建对象
//创建对象输出流
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(pp);//对人类对象进行序列化,以序列化的方式响应到客户端

//释放各种资源
oos.close();
ois.close();
socket.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}


}

public class ThreadSocket implements Runnable{

private Socket socket;

public ThreadSocket(Socket socket) {
super();
this.socket = socket;
}

public void run() {
synchronized (socket) {
try {
Thread.sleep(3000);
//响应客户端
OutputStream os = socket.getOutputStream(); //得到输出流
String replay = "对不起,服务器现在正忙,请稍后在试,或者您可先打过来100块";
PrintWriter pw = new PrintWriter(os);
pw.write(replay);
pw.flush();
//4.断掉连接
//pw.close();
//socket.close();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}


}

/**

* 创建一个类并且可以序列化

*/

public class Person implements Serializable{

private String name;

private int age;

private String address;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public Person(String name, int age, String address) {

super();

this.name = name;

this.age = age;

this.address = address;

}

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