TCP-套接字编程
###1.客户端与服务器通信
客户端
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket = new Socket("127.0.0.1",9999);
//1.向服务端发送请求
PrintStream ps = new PrintStream(socket.getOutputStream());
ps.println("服务器你好,我是客户端!");
//4.接收来自服务器的信息
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readLine = br.readLine();
System.out.println(readLine);
ps.close();
br.close();
socket.close();
}
}
服务器
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(9999);
Socket socket = server.accept();
System.out.println("连接已建立");
//2.接收来自客户端的信息
BufferedReader bf = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readLine = bf.readLine();
System.out.println(readLine);
//3.向客户端回复信息
PrintStream ps = new PrintStream(socket.getOutputStream());
ps.println("客户端你好,我是服务器!");
bf.close();
ps.close();
}
}
###2.客户端登录
客户端
public class Client {
/**
*
*
* PrintStream和BufferedReader
*
*/
public static void main(String[] args) throws UnknownHostException, IOException {
//建立连接
Socket socket = new Socket("127.0.0.1",9999);
//1.向客户端发送账号密码
PrintStream ps = new PrintStream(socket.getOutputStream());
Scanner scan = new Scanner(System.in);
String username = scan.next();
String password = scan.next();
ps.println(username);
ps.println(password);
scan.close();
//4.显示登录结果
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readLine = br.readLine();
if("1".equals(readLine)) {
System.out.println("登录成功!");
}else if("-1".equals(readLine)){
System.out.println("登录失败!");
}
ps.close();
br.close();
socket.close();
}
}
服务器
public class Server {
public static void main(String[] args) throws Exception {
Socket socket = new ServerSocket(9999).accept();
System.out.println("连接建立");
//2.接收客户端发送的账号密码
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String username = br.readLine();
String password = br.readLine();
String flag=null;
if("yl".equals(username)&&"123".equals(password)) {
flag="1";
}else {
flag="-1";
}
//3.登录结果返回给客户端
PrintStream ps = new PrintStream(socket.getOutputStream());
ps.println(flag);
br.close();
ps.close();
socket.close();
}
}
###3.客户端注册
客户端
public class Client {
/**
*
* 注册
* 使用ObjectOutpuStream和ObjectInputStream
*
*/
public static void main(String[] args) throws UnknownHostException, IOException {
//建立连接
Socket socket = new Socket("127.0.0.1",9999);
//1.向客户端发送注册信息
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
Scanner scan = new Scanner(System.in);
String username = scan.next();
String password = scan.next();
String sex = scan.next();
int age = scan.nextInt();
oos.writeObject(new User(username, password, sex, age));
scan.close();
//4.显示登录结果
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readLine = br.readLine();
if("1".equals(readLine)) {
System.out.println("注册成功!");
}else if("-1".equals(readLine)){
System.out.println("注册失败!");
}
oos.close();
br.close();
socket.close();
}
}
服务器
public class Server {
public static void main(String[] args) throws Exception {
Socket socket = new ServerSocket(9999).accept();
System.out.println("连接建立");
//2.接收客户端发送的账号密码
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
User user = (User) ois.readObject();
String flag=null;
if("yl".equals(user.getUsername())) {
flag="-1";
}else {
flag="1";
}
//3.登录结果返回给客户端
PrintStream ps = new PrintStream(socket.getOutputStream());
ps.println(flag);
ois.close();
ps.close();
socket.close();
}
}
用户类
public class User implements Serializable{
private static final long serialVersionUID = 6071568800851323264L;
private String username;
private String password;
private String sex;
private int age;
public User() {
}
public User(String username, String password, String sex, int age) {
this.username = username;
this.password = password;
this.sex = sex;
this.age = age;
}
/**
* @return username
*/
public String getUsername() {
return username;
}
/**
* @param username 要设置的 username
*/
public void setUsername(String username) {
this.username = username;
}
/**
* @return password
*/
public String getPassword() {
return password;
}
/**
* @param password 要设置的 password
*/
public void setPassword(String password) {
this.password = password;
}
/**
* @return sex
*/
public String getSex() {
return sex;
}
/**
* @param sex 要设置的 sex
*/
public void setSex(String sex) {
this.sex = sex;
}
/**
* @return age
*/
public int getAge() {
return age;
}
/**
* @param age 要设置的 age
*/
public void setAge(int age) {
this.age = age;
}
/**
* @return serialversionuid
*/
public static long getSerialversionuid() {
return serialVersionUID;
}
/* (非 Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + ", sex=" + sex + ", age=" + age + "]";
}
}
###4.客户端上传文件
客户端
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
//建立连接
Socket socket = new Socket("127.0.0.1",9999);
//传送文件
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("破冰行动.mkv"));
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
//写入
byte[] b = new byte[1024];
int len;
while((len = bis.read(b))!=-1) {
bos.write(b);
}
bis.close();
bos.close();
socket.close();
}
}
服务器
public class Server {
public static void main(String[] args) throws Exception {
//建立连接
ServerSocket server = new ServerSocket(9999);
Socket socket = server.accept();
BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("破冰行动-副本.mkv"));
byte[] b = new byte[1024];
int len;
while((len = bis.read(b))!=-1) {
bos.write(b);
}
bis.close();
bos.close();
socket.close();
}
}
InetAddress
public class Test01 {
public static void main(String[] args) throws UnknownHostException {
//获取域名对应的IP地址
// InetAddress name = InetAddress.getByName("www.CSDN.com");
// System.out.println(name);
//获取域名的所有IP地址
// InetAddress[] allByName = InetAddress.getAllByName("www.CSDN.com");
// for(InetAddress a:allByName) {
// System.out.println(a);
// }
//获取本机IP地址
InetAddress localHost = InetAddress.getLocalHost();
System.out.println(localHost);
}
}
守护线程
守护线程是为我们前端线程服务的,我们自己创建了一个线程,当我们这个线程执行结束之后,守护线程将会自动结束
public class Test01 {
public static void main(String[] args) {
//守护线程/后台线程:默默守护着前台线程,等所有的前台线程都销毁后,守护线程就会默默的销毁
// 垃圾回收器就是个守护线程
MyThread t1 = new MyThread();
t1.setDaemon(true);//设置此线程为守护线程
t1.start();
for(int i=1;i<6;i++) {
System.out.println("我是主线程"+i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
}
class MyThread extends Thread{
@Override
public void run() {
while(true) {
System.out.println("我是守护线程!");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
}