Java基础之《网络编程》

本文介绍TCP/IP协议的基础知识,包括TCP和UDP的区别、IP地址的概念,并通过Java代码示例展示了Socket通信的基本原理,涵盖客户端和服务端的实现方式。

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

网络编程(TCP/IP编程)
  网络编程是底层,不等同于网站编程

  网络基础
    什么是计算机网络
    计算机网络的主要功能
    什么是网络通信协议
      通信协议分层的思想
      举例:Java虚拟机屏蔽了操作系统的区别、
      hibernate屏蔽了不同数据库的接口
    网络通信接口
      TCP/IP参考模型
      应用层
      传输层
      网络层
      物理+数据链路层

  TCP/IP协议
    TCP协议:可靠的连接
    UDP协议:不可靠的连接

  IP地址

  要事为先,技术,用到的先学
  管理:管理自己的时间和精力
  沟通

  Socket通信
    两个Java应用程序可以通过一个双向的网络通信连接实现数据交换,
    这个双向链路的一端称为一个Socket
    
    Socket通常用来实现client-server连接

    java.net包中定义的两个类Socket和ServerSocket,分别用来实现
    双向连接的client和server端

    建立连接时所需的寻址信息为远程计算机的IP地址和端口号(Port number)

    TCP端口和UDP端口分开,TCP 8888端口和UDP 8888端口不是同一个
    可以共同存在,每一个都有65536个端口

    TCP通信
      做网络应用,应该首启动server再启动client,server和client一块儿开发

      这里讲的都是同步式的网络编程,还有异步式的网络编程

/*TCPServer.java*/

import java.net.*;
import java.io.*;

public class TCPServer {
	public static void main(String args[]) throws Exception{
		ServerSocket ss = new ServerSocket(6666);
		while (true) {
			Socket s = ss.accept();  //接受客户端的连接,阻塞式的
			System.out.println("a cilent connect");
			DataInputStream dis = new DataInputStream(s.getInputStream());
			System.out.println(dis.readUTF());  //阻塞式的
			dis.close();
			s.close();
		}
	}
}
/*TCPCilent.java*/

import java.net.*;
import java.io.*;

public class TCPCilent {
	public static void main(String args[]) throws Exception{
		Socket s = new Socket("127.0.0.1", 6666);  //server端IP和端口,client端端口系统随机分配
		//用流来互相说话
		OutputStream os = s.getOutputStream();
		DataOutputStream dos = new DataOutputStream(os);
		dos.writeUTF("hello server!");
		dos.flush();
		dos.close();
		s.close();
	}
}

    UDP通信
      不可靠
      效率高
      数据报/非连接

      UDP通信原则上不分server端和cilent端,它都是同一个插座DatagramSocket类
/*TestUDPServer.java*/

import java.net.*;

public class TestUDPServer {
	public static void main(String args[]) throws Exception {
		byte buf[] = new byte[1024];
		DatagramPacket dp = new DatagramPacket(buf, buf.length);  //定义存数据的包裹
		DatagramSocket ds = new DatagramSocket(5678);  //定义插座
		while (true) {
			ds.receive(dp);  //阻塞式的
			System.out.println(new String(buf, 0, dp.getLength()));
		}
	}
}
/*TestUDPCilent.java*/

import java.net.*;

public class TestUDPCilent {
	public static void main(String args[]) throws Exception {
		byte[] buf = (new String("Hello")).getBytes();
		DatagramPacket dp = new DatagramPacket(buf, buf.length,
			new InetSocketAddress("127.0.0.1", 5678)
			);
		DatagramSocket ds = new DatagramSocket(9999);
		ds.send(dp);
		ds.close();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值