黑马程序员 Java基础知识总结-网络编程
2014-05-19 20:11
901 查看
2、网络通讯要素
(1)IP地址(InetAddress已经封装成了对象)
1、网络中设备的标识
2、不易记忆,可用主机名
3、本地IP地址:127.0.0.1 主机名:Localhost。
(2)端口号(数字标识,没有必要封装成对象)
1、用于标识进程的逻辑地址,不同进程的标识。
2、有效端口:0~65535,其中0~1024系统使用或保留端口。
(3)传输协议
1、通讯的规则。
2、常见协议:TCP,UDP。
3、网络通讯过程
(1)找到对方 IP。
(2)数据要发到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序都用数字进行了标识。为了方便称呼这个数字,叫做端口。(逻辑端口)
了解:Ping 127.0.0.1(LocalHost)可以查看网卡是否异常。
(网络编程-IP地址)
由于IP地址是一个复杂的事物,Java已经它封装成了对象,封装成了对象把复杂的事情简单化。
下面是通过UDP协议实现的两台主机互相通信
客户端:UdpClient.java
import java.net.*;
public class UdpClient {
private DatagramSocket ds;
/*
*客户端负责发送数据
* */
public static void main(String[] args) throws Exception {
new UdpClient().send();
}
private void send() throws Exception {
// 1、创建UDP socket服务
ds = new DatagramSocket();
// 2、定义数据包用于发送数据
byte[] buf = new byte[1024];
buf = "www.itheima.com".getBytes();
InetAddress address = InetAddress.getByName("192.168.1.100");
DatagramPacket dp = new DatagramPacket(buf, buf.length, address, 10000);
// 3、通过DatagramSocket中的send方法发送通过DatagramPacket封装好的数据包
ds.send(dp);
// 4、关闭资源
receive();
ds.close();
}
private void receive() throws Exception {
// 设置缓冲区
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
// 3、接收数据
ds.receive(dp);
String data = new String(dp.getData(), 0, dp.getLength()).trim();
System.out.println(data);
}
}服务器端:UdpServer.java源代码
import java.io.*;
import java.net.*;
public class UpLoadMediaClient {
public static void main(String[] args) throws Exception {
Socket s = new Socket("192.168.1.100",10005);
//读媒体文件对象
BufferedInputStream buffr =
new BufferedInputStream(new FileInputStream("IO.jpg"));
//向服务端发送数据
PrintStream out =
new PrintStream(s.getOutputStream(),true);
//接收服务器返回信息
BufferedReader buffIn = new BufferedReader(new InputStreamReader(s.getInputStream())) ;
//设置缓冲区
byte[] buf = new byte[1024];
int len = -1;
while((len = buffr.read(buf, 0, buf.length))!=-1){
out.write(buf, 0, len);
out.flush();
}
s.shutdownOutput();
String result = buffIn.readLine();
System.out.println(result);
buffr.close();
s.close();
}
}服务器端:
import java.io.*;
import java.net.*;
public class UpLoadMediaServer {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(10005);
Socket s = ss.accept() ;
//创建接受客户端数据对象
BufferedInputStream buffIn =
new BufferedInputStream(s.getInputStream());
//写文件对象
BufferedOutputStream out =
new BufferedOutputStream(new FileOutputStream("server.jpg",true));
//返回信息到客户端对象
PrintWriter pw = new PrintWriter(s.getOutputStream());
//设置缓冲区
byte[] buf = new byte[1024];
int len = 0 ;
while((len = buffIn.read(buf, 0, buf.length))!=-1){
out.write(buf, 0, len);
out.flush();
}
pw.write("上传成功");
pw.flush();
out.close();
s.close();
ss.close();
}
}
(1)IP地址(InetAddress已经封装成了对象)
1、网络中设备的标识
2、不易记忆,可用主机名
3、本地IP地址:127.0.0.1 主机名:Localhost。
(2)端口号(数字标识,没有必要封装成对象)
1、用于标识进程的逻辑地址,不同进程的标识。
2、有效端口:0~65535,其中0~1024系统使用或保留端口。
(3)传输协议
1、通讯的规则。
2、常见协议:TCP,UDP。
3、网络通讯过程
(1)找到对方 IP。
(2)数据要发到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序都用数字进行了标识。为了方便称呼这个数字,叫做端口。(逻辑端口)
了解:Ping 127.0.0.1(LocalHost)可以查看网卡是否异常。
(网络编程-IP地址)
由于IP地址是一个复杂的事物,Java已经它封装成了对象,封装成了对象把复杂的事情简单化。
下面是通过UDP协议实现的两台主机互相通信
客户端:UdpClient.java
import java.net.*;
public class UdpClient {
private DatagramSocket ds;
/*
*客户端负责发送数据
* */
public static void main(String[] args) throws Exception {
new UdpClient().send();
}
private void send() throws Exception {
// 1、创建UDP socket服务
ds = new DatagramSocket();
// 2、定义数据包用于发送数据
byte[] buf = new byte[1024];
buf = "www.itheima.com".getBytes();
InetAddress address = InetAddress.getByName("192.168.1.100");
DatagramPacket dp = new DatagramPacket(buf, buf.length, address, 10000);
// 3、通过DatagramSocket中的send方法发送通过DatagramPacket封装好的数据包
ds.send(dp);
// 4、关闭资源
receive();
ds.close();
}
private void receive() throws Exception {
// 设置缓冲区
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
// 3、接收数据
ds.receive(dp);
String data = new String(dp.getData(), 0, dp.getLength()).trim();
System.out.println(data);
}
}服务器端:UdpServer.java源代码
import java.net.*; public class UdpServer { private String ip; private int port; private DatagramSocket ds; public static void main(String[] args) throws Exception { new UdpServer().receive(); } public void receive() throws Exception { // 1、创建Socket服务 ds = new DatagramSocket(10000); // 2、定义缓冲区用于存储数据 byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, buf.length); // 3、接收数据 ds.receive(dp); buf = dp.getData(); reverse(buf, dp.getLength());// 反转 ip = dp.getAddress().getHostAddress(); // 获取ip地址 port = dp.getPort();// 获取端口 //System.out.println(data + "::" + ip + "::" + port); send(buf); ds.close(); } // 发送数据到客户端 public void send(byte[] buf) throws Exception { InetAddress address = InetAddress.getByName(ip); DatagramPacket dp = new DatagramPacket(buf, buf.length, address, port); // 3、通过DatagramSocket中的send方法发送通过DatagramPacket封装好的数据包 ds.send(dp); // 4、关闭资源 } public static byte[] reverse(byte[] buf, int length) { for (int i = 0; i < (length) / 2; i++) { byte temp = buf[i]; buf[i] = buf[length - i - 1]; buf[length - i - 1] = temp; } return buf; } }下面是通过TCP/IP协议实现媒体文件的上传:
import java.io.*;
import java.net.*;
public class UpLoadMediaClient {
public static void main(String[] args) throws Exception {
Socket s = new Socket("192.168.1.100",10005);
//读媒体文件对象
BufferedInputStream buffr =
new BufferedInputStream(new FileInputStream("IO.jpg"));
//向服务端发送数据
PrintStream out =
new PrintStream(s.getOutputStream(),true);
//接收服务器返回信息
BufferedReader buffIn = new BufferedReader(new InputStreamReader(s.getInputStream())) ;
//设置缓冲区
byte[] buf = new byte[1024];
int len = -1;
while((len = buffr.read(buf, 0, buf.length))!=-1){
out.write(buf, 0, len);
out.flush();
}
s.shutdownOutput();
String result = buffIn.readLine();
System.out.println(result);
buffr.close();
s.close();
}
}服务器端:
import java.io.*;
import java.net.*;
public class UpLoadMediaServer {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(10005);
Socket s = ss.accept() ;
//创建接受客户端数据对象
BufferedInputStream buffIn =
new BufferedInputStream(s.getInputStream());
//写文件对象
BufferedOutputStream out =
new BufferedOutputStream(new FileOutputStream("server.jpg",true));
//返回信息到客户端对象
PrintWriter pw = new PrintWriter(s.getOutputStream());
//设置缓冲区
byte[] buf = new byte[1024];
int len = 0 ;
while((len = buffIn.read(buf, 0, buf.length))!=-1){
out.write(buf, 0, len);
out.flush();
}
pw.write("上传成功");
pw.flush();
out.close();
s.close();
ss.close();
}
}
相关文章推荐
- 黑马程序员-Java基础知识预备之Java网络编程
- 黑马程序员--网络编程--java学习日记10(基础知识)
- 黑马程序员——java基础知识之网络编程(二)
- 黑马程序员Java培训、Android培训_网络编程的基础知识
- 黑马程序员——java基础知识之网络编程(一)
- 黑马程序员--Java基础总结---网络编程
- 黑马程序员---java基础知识(十):网络编程
- 黑马程序员_JavaSE基础知识总结十八:网络编程
- 黑马程序员_Java编程学习日记01(开博之言、java编程基础知识总结)
- 黑马程序员-java基础-网络基础知识,JAVA网络编程
- 黑马程序员:Java基础总结----网络编程
- 黑马程序员:Java基础总结----网络编程
- 黑马程序员_08Java网络编程知识总结
- 黑马程序员——基础知识总结_网络编程
- 黑马程序员_Java基础:网络编程总结
- 黑马程序员_Java基础:网络编程总结
- 黑马程序员_java基础知识学习总结二
- 黑马程序员_java基础知识学习总结一
- 黑马程序员_java基础知识学习总结三