Java学习笔记--网络编程Socket
2017-05-31 21:08
579 查看
**今天学习了网络编程,主要用到Socket语句。
1.首先了解网络编程三要素
a.ip:一个计算机的标识,是一个网络之间互联的协议(Internet Protocol),每个终端有且仅有一个ip地址。
b.端口:设备与外界进行通信的出口,用来进行通信,分为物理端口和逻辑端口,这里用到的端口是逻辑端口,
有效端口的范围在0~65535之间,是应用程序在计算机内部对应的表示。
c.协议:计算机网络中用于交换信息而规则,标准或约定的集合。这里指TCP/UDP。
2.TCP/UDP协议
TCP协议:是一种面向连接的,可靠的基于字节流的传输层通信协议,需要建立连接,形成连接通道,
数据可以使用连接通道直接进行传输,无大小限制,效率比较低
UDP协议:User Datagrem Protocol,用户数据包协议,一种无连接的传输层协议,和TCP协议相同用于处理数据包,
UDP有不提供数据包的分组,组装,还有对数据包进行排序的缺点,所以我们无法确定数据包是否被安全
传达。效率较TCP来说比较高,但是不安全。
3.学习中用到的Java类
InetAddress:IP地址描述类,为了方便我们对IP地址的获取和操作,常见功能有:
public static InerAddress getByName(String host);通过主机名或IP地址得到InetAdress类
public String getHostAddress();返会ip地址字符串
public String getHostName(); 返回ip地址主机名。
4.Socket编程(网络编程)
a.Socket套接字具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
b.Socket编程机制:
通信双方都有Socket。
网络通信实际就是Socket间的通信。
数据在两个Socket之间进行IO传输。
c.UDP通信
发送步骤:创建UDP发送数据端的Socket对象;创建数据包并给出数据,把数据打包;通过Socket对象发送数据包;释放资源。
接收步骤:创建UDP接收端的Socket对象;创建一个接收数据的数据包;接收数据,将数据放在接收的数据
4000
包中;解析数据包,并把数据显示在控制台上;释放资源。
d.TCP通信
发送端:创建TCP底层传输数据Socket对象(指定服务器ip及端口号),如Socket sk = new Socket(“196.168.25.25”,9999);获取输出流,并写入数据,如OutputStream outputStream = sk.getOutputStream();
outputStream.write(“Hello”.getBytes());
释放资源;
接收端:创建TCP协议接收端Socket对象(ServerSocket);监听客户端连接(Socket socket = new ServerSocket().accpet();获取输入流,并读取数据,显示在数据台;释放资源(socket.close())。
1.首先了解网络编程三要素
a.ip:一个计算机的标识,是一个网络之间互联的协议(Internet Protocol),每个终端有且仅有一个ip地址。
b.端口:设备与外界进行通信的出口,用来进行通信,分为物理端口和逻辑端口,这里用到的端口是逻辑端口,
有效端口的范围在0~65535之间,是应用程序在计算机内部对应的表示。
c.协议:计算机网络中用于交换信息而规则,标准或约定的集合。这里指TCP/UDP。
2.TCP/UDP协议
TCP协议:是一种面向连接的,可靠的基于字节流的传输层通信协议,需要建立连接,形成连接通道,
数据可以使用连接通道直接进行传输,无大小限制,效率比较低
UDP协议:User Datagrem Protocol,用户数据包协议,一种无连接的传输层协议,和TCP协议相同用于处理数据包,
UDP有不提供数据包的分组,组装,还有对数据包进行排序的缺点,所以我们无法确定数据包是否被安全
传达。效率较TCP来说比较高,但是不安全。
3.学习中用到的Java类
InetAddress:IP地址描述类,为了方便我们对IP地址的获取和操作,常见功能有:
public static InerAddress getByName(String host);通过主机名或IP地址得到InetAdress类
public String getHostAddress();返会ip地址字符串
public String getHostName(); 返回ip地址主机名。
import java.net.InetAddress; import java.net.UnknownHostException; public class InetAddressDemo { public static void main(String[] args) throws Exception { InetAddress address = InetAddress.getByName("192.168.20.25"); String hostName = address.getHostName(); System.out.println(hostName); } }
4.Socket编程(网络编程)
a.Socket套接字具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
b.Socket编程机制:
通信双方都有Socket。
网络通信实际就是Socket间的通信。
数据在两个Socket之间进行IO传输。
c.UDP通信
发送步骤:创建UDP发送数据端的Socket对象;创建数据包并给出数据,把数据打包;通过Socket对象发送数据包;释放资源。
接收步骤:创建UDP接收端的Socket对象;创建一个接收数据的数据包;接收数据,将数据放在接收的数据
4000
包中;解析数据包,并把数据显示在控制台上;释放资源。
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.util.Scanner; public class UdpClient { public static void main(String[] args) throws Exception { //1.创建发送端的socket对象 DatagramSocket ds = new DatagramSocket(); InetAddress address = InetAddress.getByName("192.168.20.25"); int port = 9999; //2.创建键盘录入对象 Scanner sc = new Scanner(System.in); String line; while ((line=sc.nextLine())!=null) { //键盘录入的数据line byte[] buf = line.getBytes(); int length = buf.length; DatagramPacket dp = new DatagramPacket(buf, length, address, port); //发送数据包 ds.send(dp); } //释放资源 ds.close(); } } import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class UdpServer { public static void main(String[] args) throws Exception { //创建接收端的socket对象 DatagramSocket ds = new DatagramSocket(9999); //接受来自客户端的数据 while (true) { //创建数据包 byte[] buf = new byte[1024]; int length = buf.length; DatagramPacket dp = new DatagramPacket(buf, length); //接受来自客户端的数据 ds.receive(dp); //解析数据包中的数据 byte[] data = dp.getData(); int len = dp.getLength(); System.out.println(new String(data, 0, len)); } } }
d.TCP通信
发送端:创建TCP底层传输数据Socket对象(指定服务器ip及端口号),如Socket sk = new Socket(“196.168.25.25”,9999);获取输出流,并写入数据,如OutputStream outputStream = sk.getOutputStream();
outputStream.write(“Hello”.getBytes());
释放资源;
接收端:创建TCP协议接收端Socket对象(ServerSocket);监听客户端连接(Socket socket = new ServerSocket().accpet();获取输入流,并读取数据,显示在数据台;释放资源(socket.close())。
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; public class ServerThread implements Runnable{ private Socket sk; public ServerThread(Socket sk){ this.sk = sk; } @Override public void run() { try { BufferedReader br = new BufferedReader(new InputStreamReader(sk.getInputStream())); BufferedWriter bw = new BufferedWriter(new FileWriter(UUIDUtils.getFileName())); String line; while((line = br.readLine()) != null ){ bw.write(line); bw.newLine(); bw.flush(); } } catch (IOException e) { // TODO Auto-generated catch block e.print```````` tackTrace(); } } } import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; /** * 2.6 需求:客户端读取文本文件中的内容发送给服务端,服务端将内容控制台输出 * 客户端: * 1.读取文本文件,一次读取一行 * 2.将读取到的内容写入通道,一次写一行 * 3.释放资源 * 服务器端: * 1.从通道中读取数据,一次读取一行 * 2.输出 */ public class TcpClient { public static void main(String[] args) throws Exception { Socket sk = new Socket("192.168.20.25", 10010); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sk.getOutputStream())); BufferedReader br = new BufferedReader(new FileReader("a.txt")); String line; while((line = br.readLine()) != null ){ bw.write(line); bw.newLine(); bw.flush(); } br.close(); bw.close(); sk.close(); } } import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; 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(10010); while(true){ Socket sk = ss.accept(); new Thread(new ServerThread(sk)).start(); } } } import java.util.UUID; public class UUIDUtils { public static String getFileName(){ String fileName = UUID.randomUUID().toString(); fileName = fileName.replaceAll("-", "") + ".txt"; return fileName; } }
相关文章推荐
- JAVA学习笔记Day24——javaTCP UDP网络编程Socket总结
- Socket网络编程学习笔记(1)
- Socket网络编程学习笔记(1):常用方法介绍
- 黑马程序员________Java中UDP和TCP网络编程学习笔记
- JAVA socket编程学习笔记
- Java Socket 学习笔记
- Socket网络编程学习笔记(2)
- java学习笔记12———网络编程
- JAVA学习笔记(网络编程 之 socket)
- Socket网络编程学习笔记(转)
- java学习笔记(五)——网络编程
- Socket网络编程学习笔记(2):面向连接的Socket
- [零散篇]Java学习笔记---Java的Socket网络编程以及多线程
- 网络编程学习笔记一:Socket编程
- Socket网络编程学习笔记(5):发送和接收实体类数据
- Socket网络编程学习笔记
- Java 网络编程 学习笔记二 Socket 用法
- python网络编程学习笔记(3):socket网络服务器
- Socket网络编程学习笔记
- java 学习笔记——网络(Socket)