【java网络】深化对SeverSocket和Socket的理解

本文深入探讨了Java中的SeverSocket和Socket在网络编程中的应用,特别是如何在多线程环境中使用它们。通过服务端和客户端的示例代码,展示了如何创建和交互,同时强调了在信息传输时读写顺序的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • SeverSocket和Socket多线程的使用

服务端:

package edu.net.sever.sever.client.sever;

import edu.Student;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

class Service implements Runnable{
    private ServerSocket server = null;
    private Socket s = null;

    private InputStream input = null;
    private OutputStream output = null;
    private ObjectOutputStream objout = null;
    private PrintWriter pw = null;

    public Service(Socket s){
        this.s = s;
    }
    @Override
    public void run() {
        try {
            input = s.getInputStream();
            output = s.getOutputStream();
            objout = new ObjectOutputStream(output);
            pw = new PrintWriter(output);


            //发一个整数
            objout.writeInt(20);
            //发一个浮点数
            objout.writeDouble(23.99);
            //发一个字符串
//            pw.println("Hello");
            //发一个对象
            Student ss = new Student(123,"HAHA",'男');
            objout.writeObject(ss);

//            pw.flush();
            objout.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
public class ObjectSever {
    public static void main(String[] args) {
        ServerSocket server = null;
        Socket s = null;

        InputStream input = null;
        OutputStream output  = null;
        ObjectOutputStream objout = null;
        PrintWriter pw = null;
        try {
            server = new ServerSocket(9999);
            System.out.println("监听客户是否连接");
            while (true) {
                s = server.accept();
                System.out.println("已监听到客户连接[远程主机:" +
                        s.getRemoteSocketAddress()
                        + ":端口" + s.getPort() + "]");



                  new Thread(new Service(s)).start();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

客户端:

package edu.net.sever.sever.client.client;

import edu.Student;

import java.io.*;
import java.net.Socket;
import java.net.ServerSocket;

public class ObjectClient {
    public static void main(String[] args) {
        Socket s = null;
        String ip = "192.168.50.13";
        int port = 9999;

        InputStream input = null;
        OutputStream output = null;
        ObjectInputStream  objin = null;
//        BufferedReader bf = null;


        try {
            s = new Socket(ip, port);


            input = s.getInputStream();
            output = s.getOutputStream();

            objin = new ObjectInputStream(input);


            int a = objin.readInt();
            System.out.println(a);
            double b = objin.readDouble();
            System.out.println(b);
//            BufferedReader bf = new BufferedReader(
//                    new InputStreamReader(in));
//            String str = bf.readLine();

//            Student stu = (Student) objin.readObject();
            System.out.println(objin.readObject());
            //System.out.println(a + ":" + b + ":" +/*+ str +*/ ":" + stu);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

学生对象类:

package edu;

import java.io.Serializable;

public class Student implements Serializable {  // 标识接口
    private int age;
    private String name;
    private char sex;

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public Student(){

    }
    public Student(int age, String name,char sex) {
        this.age = age;
        this.name = name;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", sex=" + sex +
                '}';
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

进行信息传输时,读写顺序需一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值