JAVA socket通信实例

本文介绍了Java中使用Socket进行通信的实例,包括客户端如何连接服务器,获取数据输入流和输出流,利用DataOutputStream和ObjectOutputStream发送不同类型的数据。同时,服务器端如何接收客户端的连接,进行数据的接收和发送,强调了对象发送时需要实现Serializable接口以及包名的一致性。

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

客户端
首先需要连接指定ip地址和指定端口号的服务器,获取数据输入流和数据输出流

private synchronized void connect() {
        try {
            socket = new Socket(IP, port);
            state = running;
            dis = new DataInputStream(new BufferedInputStream(
                    socket.getInputStream()));
            dos = new DataOutputStream(new BufferedOutputStream(
                    socket.getOutputStream()));
            oos = new ObjectOutputStream(socket.getOutputStream());
            ois = new ObjectInputStream(new BufferedInputStream(
                    socket.getInputStream()));
            System.out.println("连接成功");
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            Log.i(TAG, "network connect 连接异常");
        }
    }

说明 DataOutputStream可以发送int String等类型的数据,ObjectOutputStream除了可以发送int String等类型的数据外,主要是发送object对象(对想要继承Serializable)
例如:

package com.sh.allobject;

import java.io.Serializable;

public class User implements Serializable{
    public String userID;
    public String userName;
    public String userPhoneNum;
    public String getUserID() {
        return userID;
    }
    public void setUserID(String userID) {
        this.userID = userID;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPhoneNum() {
        return userPhoneNum;
    }
    public void setUserPhoneNum(String userPhoneNum) {
        this.userPhoneNum = userPhoneNum;
    }


}

就可以通过ObjectOutputStream将整个已经赋值后的对象发送到服务器,同样服务器也应该定义相同的对象,并且所在包名必须与客户端相同,否则将不能接收到。服务器也可以发送对象到客户端,方法及要求类似。

发送数据方式

dos.writeInt(1);
dos.writeUTF("data");
dos.flush();

接收数据方式

int type = ois.readInt();
String data=ois.readUTF();

服务器端
首先接收客户端的连入

ServerSocket serverSocket=new ServerSocket(8888);
Socket socket=serverSocket.accept();

接收数据和发送数据与上述相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值