java从入门到弃坑十八天

1.网络编程三要素:A:ip:一个计算机的标识。

                                B:端口:每个应用程序对应一个端口用来通信,有效端口:0-65535,其中0-1024

                                                 系统使用或保留端口。

                                C:协议:TCP和UDP协议。

2.IP:特殊IP:127.0.0.1:本地回环地址,用来做本地测试。

                         Ping    IP地址:该指令用来检测本机是否可以和指定的IP地址的计算机进行正常通信。

                         ipconfig:该指令用来查看本机的ip地址

                         xxx.xxx.xxx.255:广播地址,该地址发出的信息在该局域网内的所有ip都可查看。

3.端口号:物理端口:物理设备对应的端口,网卡口。

                 逻辑端口:用来标识我们的计算机上的进程,端口号有效范围是0-65535,0-1024为系统占用

4.协议:UDP:把数据打包成数据包,不需要建立连接。数据包大小有限制,不能超过64k。因为无连接,因此属于

                         不可靠协议(可能丢失数据),但是效率高。

              TCP:需要建立连接形成连接通道,数据用该通道进行传输,没有大小限制,因为有连接,属于可靠协议,

                         但是传输效率低。

5.InetAddress:为了方便我们对IP地址的获取和操作而产生的类。可以用此类表示IP地址。

                          public static InetAddress getByName(String host)( host: 可以是主机名,也可以是IP地址的字符串表

                          现形式)

                          public String getHostAddress()返回 IP 地址字符串(以文本表现形式)。

                          public String getHostName()获取此 IP 地址的主机名。

6.网络编程,也叫socket编程,套接字编程。网络上具有唯一标识的IP和端口组合构成唯一能识别的标识符套接字。

   socket原理机制:通信两端都有socket,数据在两个socket之间通过io流传输。

7.UDP协议进行网络编程:

        A:UDP发送端步骤:1.创建UDP发送数据端socket对象。

                                           2.创建数据包并将数据封装在包内。

                                           3.通过socket对象发送数据包。

                                           4.释放资源。

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPClient {
	public static void main(String[] args) throws Exception {
		InetAddress add=InetAddress.getByName("Lenovo-PC");
		DatagramSocket ds=new DatagramSocket();
		byte[] buf="java".getBytes();
		DatagramPacket dp=new DatagramPacket(buf, buf.length, add, 9999);
		ds.send(dp);
		ds.close();
	}
}

        B:UDP接收端步骤:1.创建UDP接收数据端socket对象。

                                           2.创建接收数据的数据包并接收数据。

                                           3.从数据包中解析出数据。

                                           4.释放资源。

import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPServer {
	public static void main(String[] args) throws Exception {
		DatagramSocket ds=new DatagramSocket(9999);
		byte[] buf=new byte[1024];
		DatagramPacket dp=new DatagramPacket(buf, buf.length);
		ds.receive(dp);
		System.out.println(new String(buf, 0, dp.getLength()));
		ds.close();
	}
}

多线程实现聊天室(相当于是将发送数据端和接收数据端合并)

输入线程:

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
public class ClientThread implements Runnable{
	DatagramSocket ds;
	
	public ClientThread(DatagramSocket ds) {
		super();
		this.ds = ds;
	}

	public void run() {
		try {
			InetAddress add=InetAddress.getByName("Lenovo-PC");
			Scanner sc=new Scanner(System.in);
			String s;
			while(true){
				s=sc.nextLine();
				if(s.equals("exit")){
					break;
				}
				byte[] chs=s.getBytes();
				DatagramPacket dp=new DatagramPacket(chs,chs.length, add, 10086);
				ds.send(dp);
			}
			ds.close();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
}

输出线程:

import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class ServerThread implements Runnable{
	DatagramSocket ds;
	public ServerThread(DatagramSocket ds) {//构造传参
		super();
		this.ds = ds;
	}

	public void run() {
		try {
			while(true){
				byte [] buf=new byte[1024];
				DatagramPacket dp=new DatagramPacket(buf, buf.length);
				ds.receive(dp);
				System.out.println(new String(buf, 0, dp.getLength()));
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	
}

主程序:

import java.net.DatagramSocket;
public class MainThread {
	public static void main(String[] args) throws Exception {
		DatagramSocket ds=new DatagramSocket();
		new Thread(new ClientThread(ds)).start();
		new Thread(new ServerThread(new DatagramSocket(10086))).start();
	}
}


8.TCP协议进行网络编程:

   发送数据步骤:A:创建TCP协议发送端Socket对象,指定服务器IP及端口。

                            B:获取输出流,并写数据。

                            C:释放资源。(由于TCP是一种可靠的协议,所以只能先运行接收端,在运行发送端)

   接收数据步骤:A:创建TCP接收端socket对象,指定端口。

                            B:监听客户端链接。

                            C:获取输出流并读取数据。

                            D:释放资源。






exp:客户端键盘录入数据,服务端将数据写入文件

键盘录入文件并输入到服务端:

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

public class TCPClient {
	public static void main(String[] args) throws Exception {
		InetAddress add=InetAddress.getByName("Lenovo-PC");
		Socket sk=new Socket(add, 9527);
		Scanner sc=new Scanner(System.in);
		String s;
		BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));
		while((s=sc.nextLine())!=null){
			bw.write(s);
			bw.newLine();
			bw.flush();
		}
		bw.close();
		sk.close();
	}
}

读取io流中数据并写入文件:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {
	public static void main(String[] args) throws Exception {
		ServerSocket ss=new ServerSocket(9527);
		Socket sk=ss.accept();
		BufferedReader br=new BufferedReader(new InputStreamReader(sk.getInputStream()));
		BufferedWriter bw=new BufferedWriter(new FileWriter("sun.txt"));
		String s;
		while((s=br.readLine())!=null){
			System.out.println(s);
			bw.write(s);
			bw.newLine();
			bw.flush();
		}
		bw.close();
		sk.close();
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值