第七章 网络编程

网络编程

     网络概念

                能够向另一台计算机发送或接收数据的程序叫网络程序

   IP

                IP地址具有唯一性,IP地址是IP网络中数据传输的依据,它标识了IP网络中的一个连接,一台主机可以有多个IP地址。IP分组中的IP地址在网络传输中是保持不变的

   端口号

                保证软件与外界的通信互不干扰,一般来说一个端口只能同时被一个软件使用

   协议

                为网络中的数据交换(通信)建立的规则、标准或约定

   socket

                网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket

   HTTP协议

                客户端浏览器或其他程序与Web服务器之间的应用层通信协议

   Web服务器

                网络服务器是网络环境下为客户提供某种服务的专用计算机

 

TCP面向连接的可靠的传输协议

import java.io.*;
import java.net.*;
import java.util.Scanner;
/*
 * 服务器
 * ServerSocket:实现端口侦听
 */
public class Server {
	public static void main(String[] args) throws Exception {
		Scanner input = new Scanner(System.in);
		System.out.println("======服务器======");
		// 1.创建服务器端的ServerSocket对象
		ServerSocket serverSocket = new ServerSocket(8806);
		System.out.println("正在等待连接....");
		// 2.侦听端口,阻塞当前程序;连接建立成功返回Socket类的实例
		Socket socket = serverSocket.accept();
		System.out.println("连接成功....");
		// 3.获取输入流,接收读入信息
		InputStream is = socket.getInputStream();
		byte[] buffer = new byte[1024];
		is.read(buffer);
		// 4.关闭
		socket.shutdownInput();
		System.out.println("He said:"+new String(buffer));
		
		// 获取输出流
		OutputStream os =  socket.getOutputStream();
		System.out.println("you said:");
		String msg = input.next();
		// 写出信息
		os.write(msg.getBytes());
		os.flush();
		socket.shutdownOutput();
		
		/*
		 * 使用字节流进行输入,可能会导致中文乱码和效率低下,所以可以使用
		 * InputStreamReader将其转换为字符流,在使用BufferedReader增加缓存功能
		 */
		
	}
}
import java.io.*;
import java.net.*;
import java.util.Scanner;

/*
 * 使用TCP/IP协议开发的程序,一般分客户端和服务器两部分;
 * 客户端
 */
public class Client {
	public static void main(String[] args) throws Exception {
		System.out.println("======客户端======");
		Scanner input = new Scanner(System.in);
		// 创建客户端Socket对象,指定IP和端口
		Socket socket = new Socket("127.0.0.1", 8806);
		// 获取输出流,写入信息
		OutputStream os = socket.getOutputStream();
		System.out.println("you said:");
		String msg = input.next();
		os.write(msg.getBytes());
		socket.shutdownOutput();
		
		// 获取输入流,读入信息
		InputStream is =  socket.getInputStream();
		byte[] buffer = new byte[1024];
		is.read(buffer);
		socket.shutdownInput();
		System.out.println("He said:"+new String(buffer));
	}
}

 

UDP是无连接的、不可靠的协议

import java.net.*;
import java.util.Scanner;

public class Client1 {
	public static void main(String[] args) throws Exception {
		// 信息
		Scanner input = new Scanner(System.in);
		System.out.println("you said:");
		String msg = input.next();
		// 创建数据码头
		DatagramSocket socket = new DatagramSocket();
		// 创建数据包
		/*
		 * 包装发送的数据,第一个参数为数据转换为字节数组,第二个参数为发送长度,第三个参数为接收方地址,第四个参数为端口号
		 */
		DatagramPacket packet = new DatagramPacket(msg.getBytes(),
				msg.getBytes().length, InetAddress.getByName("127.0.0.1"), 8812);
		// 发送
		socket.send(packet);
		socket.close();
	}
}
import java.net.*;

public class Client2 {
	public static void main(String[] args) throws Exception {
		DatagramSocket socket = new DatagramSocket(8812);
		byte[] buffer = new byte[1024];
		DatagramPacket packet  = new DatagramPacket(buffer, buffer.length);
		socket.receive(packet);
		byte[] data = packet.getData();
		System.out.println("He said:"+new String(data));
		socket.close();
	}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值