编程1
2015-09-07 16:07
330 查看
public class ClientLogin {
}
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();
}
}
}
public class ThreadSocket implements Runnable{
}
/**
* 创建一个类并且可以序列化
*/
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;
}
}
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;
}
}
相关文章推荐
- matlab知识点汇集
- Java的运行原理
- Java生成pdf
- JAVA高并发学习笔记(一)
- 在MATLAB中调用封装好的C++函数的方法
- C# Regex.IsMatch (正则表达式验证:数字、小数点、邮件、计算表达式)
- C# GDI+ 橡皮筋技术(转)
- Yii2 DetailView添加html属性
- java web基础之servlet
- 关于thinkphp中U函数传参数问题
- python 发送邮件
- hdu 1533 Going Home 费用流MCMF模板
- struts2往action传值时的乱码问题
- 字符串匹配的KMP算法
- C++递归实现格雷码
- [LeetCode]题解(python):003-Longest Substring Without Repeating Characters
- Asp.net中CheckBox控制GridView
- HDU 3966 Aragorn's Story 树链剖分
- git项目添加.gitigore文件
- MyEclipse安装后需要进行的配置