进程和线程,Java网络编程

进程和线程

在这里插入图片描述

创建线程

在这里插入图片描述

重写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();
        }

    }
}
  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

whc15059539669

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值