进程和线程
创建线程
重写run()方法
启动线程:start()而非run()
线程状态
线程调度
线程同步
Soclet网络编程
IP地址
DNS域名解析器
网路服务器
客户机—》服务器(Client/Server)(C/S)(需要安装应用程序)
浏览器—》服务器 ( Browser/Server)(B/S)
网络分层和协议
Socket简介
Socket(套接字)
java.net
流式套接字:针对TCP协议的Socket网络编程
Socket(客户端)
ServerSocket(服务器前端)
数据包式套接字:针对UDP协议的Socket网络编程
服务器端
1.创建一个服务器Socket
ServerSocket serverSocket=new ServerSocket(5000);
2.accept接收客户端
Socket socket =serverSocket.accept();
3.获得输入流,获得客户请求
InputStream inputStream= socket.getInputStream();
。。。。。。。
4.通过输出流给客户端服务器的响应
OutputStream outputStream=socket.getOutputStream();
String d="用户登陆成功";
//释放资源
inputStream.close();
socket.close();
serverSocket.close();
客户端
1.创建客户端Socket
Socket socket=new Socket("localhost",5000);
2.通过输出流发送请求
OutputStream outputStream=socket.getOutputStream();
String a="用户名:tom,密码:123456";
byte b[]=a.getBytes();
。。。。。。
4.接受服务器的响应
InputStream inputStream=socket.getInputStream();
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
String s;
//3.释放资源
outputStream.close();
socket.close();
服务器线程和多个客户端
用户类
package ThteadSocket;
import java.io.Serializable;
public class User implements Serializable {
String name;
String id;
public User(String name,String id){
this.name=name;
this.id=id;
}
public String getName() {
return name;
}
public String getId() {
return id;
}
}
线程类
package ThteadSocket;
/*
线程类:对应每个用户请求对应一个线程
*/
import MySocket.LogionServer;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class MyThtead extends Thread {
Socket socket;
public MyThtead(Socket socket){
this.socket=socket;
}
@Override
public void run() {
try {
//3.获得输入流,获得客户请求
InputStream inputStream= socket.getInputStream();
ObjectInputStream objectInputStream=new ObjectInputStream(inputStream);
ThteadSocket.User user= null;
try {
user=(User) objectInputStream.readObject();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println("客户端说:"+user.getName()+"-----"+user.getId());
//得到客户端IP
InetAddress ip=socket.getInetAddress();
String a=ip.getHostAddress();
System.out.println("相应客户端IP"+a);
//4.通过输出流给客户端服务器的响应
OutputStream outputStream=socket.getOutputStream();
String d="用户登陆成功";
byte b[]=d.getBytes();
outputStream.write(b);
//4.释放资源
outputStream.close();
objectInputStream.close();
inputStream.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
服务器端
package ThteadSocket;
import MySocket.User;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务器端
*/
public class LogionServerUser {
public static void main(String[] args) {
//1.创建一个服务器Socket
try {
ServerSocket serverSocket=new ServerSocket(5100);
while (true){ //2.accept接收客户端
Socket socket =serverSocket.accept();
MyThtead myThtead=new MyThtead(socket);
myThtead.start();
}
}
catch (IOException e) {
e.printStackTrace();
}
}
}
客户端一
package ThteadSocket;
import java.io.*;
import java.net.Socket;
/*
客户端
*/
public class LogonSocketUser {
//创建Socket对象
public static void main(String[] args) {
//1.创建客户端Socket
try {
Socket socket=new Socket("localhost",5100);
//2.通过输出流发送请求
OutputStream outputStream=socket.getOutputStream();
ObjectOutputStream objectOutputStream=new ObjectOutputStream(outputStream);
User user=new User("wang","123456");
objectOutputStream.writeObject(user);
//4.接受服务器的响应
InputStream inputStream=socket.getInputStream();
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
String s;
while ((s=bufferedReader.readLine ())!=null){
System.out.println("服务器相应说:"+s);
}
//3.释放资源
outputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端二
package ThteadSocket;
import java.io.*;
import java.net.Socket;
/*
客户端
*/
public class LogonSocketUser1 {
//创建Socket对象
public static void main(String[] args) {
//1.创建客户端Socket
try {
Socket socket=new Socket("localhost",5100);
//2.通过输出流发送请求
OutputStream outputStream=socket.getOutputStream();
ObjectOutputStream objectOutputStream=new ObjectOutputStream(outputStream);
User user=new User("wang1","123456");
objectOutputStream.writeObject(user);
//4.接受服务器的响应
InputStream inputStream=socket.getInputStream();
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
String s;
while ((s=bufferedReader.readLine ())!=null){
System.out.println("服务器相应说:"+s);
}
//3.释放资源
outputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}