网络编程笔记

本文介绍了网络编程的基本概念,包括网络定位、通讯协议等,并通过两个实例详细展示了如何使用TCP协议进行客户端和服务端的数据交换,涉及字符与自定义对象的传输。

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

借助代码的方式实现不同计算机(不同进程)之间的通讯称为网络编程。
核心要素:
(1)网络定位
IP + 端口 Port(唯一,一个进程对应一个端口号,1024-65535之间)
(2)通讯协议
TCP:传输控制协议
UDP:用户数据报协议
(3)基于TCP协议的网络编程
客户端:Socket client = new Socket(url,port);
服务端:ServerSocket server = new ServerSocket(port);
(4)实例一:发送字符与接收字符

/*====客户端====*/
Socket client = new Socket("localhost",8888);
//字节输出流
OutPutStream os = client.getOutPutStream();
//单位转换
OutPutStreamWriter osw = new OutPutStreamWriter(os);
//字符输出流
BufferedWriter bw = new BufferedWriter(osw);
//字符写出(发送字符)
bw.write("你好");
bw.newLine();
bw.flush();

//接收服务端发来的字符
InPutStream is = client.getInPutStream();
InputStreamReader isr = new InputStreamReader(isr);
BufferedReader br = new BufferedReader(isr);
String line = br.readLine();
System.out.println("服务器说:"+ line);

//关闭IO流
br.close();
bw.close();
//关闭客户端
client.close()
/*====服务端====*/
ServerSocket server = new ServerSocket(8888);
System.out.println("等待请求...");
Socket client = server.accept();
System.out.println("请求到来:"+ client.getInetAddress() + client.getHostAddress());

//接收客户端发来的字符
InPutStream is = client.getInPutStream();
InPutStreamReader isr = new InPutStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String str = br.readLine();
System.out.println(client.getInetAddress() + client.getHostAddress() + "说:" + str);

//发送字符给客户端
OutPutStream os = client.getOutPutStream();
OutPutStreamWriter osw = new OutPutStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
bw.write("拜拜");

//关闭IO流
br.close();
bw.close();
//关闭Socket
client.close();
server.close();

(5)实例二:发送对象与接收对象

/*====定义Bean对象并实现Seralizable接口====*/
public class MgrBean implements Serializable{
    private Long id;
    private String name;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

/*定义Package类用来打包对象进行传输*/
public class Package implements Serializable {
    private String type;
    private String dml;
    private Object data;
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getDml() {
        return dml;
    }
    public void setDml(String dml) {
        this.dml = dml;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }
}
/*====客户端====*/
Socket client = new Socket("localhost",6666);
OutPutStream os = client.getOutPutStream();
ObjectOutPutStream oos = new ObjectOutPutStream(os);

//新建对象并赋值
MgrBean mgr = new MgrBean();
mgr.setId(1);
mgr.setName("text");

//新建Package对象并将mgr进行打包
Package bag = new Package();
bag.setType("Mgr");
bag.setDml("saveMgr");
bag.setData(mgr);

//对象写出
oos.writeObject(bag);
oos.flush();

//关闭IO流和客户端
oos.close();
client.close();
/*====服务端(服务端的Bean要与客户端的相同)====*/
SocketServer server = new SocketServer(6666);
Socket client = server.accept();
InPutStream is = client.getInPutStream();
ObjectInPutStream ois = new ObjectInPutStream(is);

//先读取包裹
Package bag = (Package)ois.readObject();
String type = bag.getType();
String dml = bag.getDml();
Object data = bag.getData();
//根据包裹的数据判断Bean的类型与调用的方法
if(type.equal("Mgr")){
    Mgr mgr = (Mgr)data;
    if(dml.equal("saveMgr")){
        dao.saveMgr(mgr);//调用Dao的方法将客户端传过来的数据存入数据库
    }
}

//关闭IO流与Socket
ois.close();
client.close();
server.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值