java从入门到弃坑十八天

来源:互联网 发布:霍华德职业生涯数据 编辑:程序博客网 时间:2024/06/05 19:59

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();}}


原创粉丝点击