黑马程序员---java基础---网络编程
来源:互联网 发布:电脑美工收入 编辑:程序博客网 时间:2024/05/22 10:52
------- android培训、java培训、期待与您交流! ----------
一.网络编程三要素:
1.IP:
二进制:四段8位的二进制表示;
十进制:四段3位的0--255的数字;
2.端口:
1).物理端口:网卡口
2).逻辑端口:由操作系统维护,Windows下0--65535
0-1024由系统内部使用,我们尽量不要使用;
我们讲的端口:逻辑端口:
3.协议:
1).UDP协议:
A.将数据源和目的封装成数据包中,
B.不需要建立连接;
C.每个数据报的大小在限制在64k;
D.因无连接,是不可靠协议;但速度快
2).TCP协议:
A.需要建立连接;
B.在连接中进行大数据量传输;
C.通过三次握手完成连接,是可靠协议;
D.必须建立连接,效率会稍低
二.UDP协议编程:
1.发送端:
1.实例化DatagramSocket();
DatagramSocket socket = new DatagramSocket();
2.准备数据:
IP: InetAddress add = InetAddress("Lenovo-PC");
端口: int port = 8888;
数据: byte[] byteArray = "你好".getBytes();
3.准备数据报:
DatagramPacket packet = new DatagramPacket(byteArray,
byteArray.length,
add,port);
4.发送:
socket.send(packet);
5.释放资源:
socket.close();
2.接收端:
//1.实例化DatagramSocket
DatagramSocket socket = new DatagramSocket(8888);
//2.准备一个空的byte[]数组
byte[] byteArray = new byte[1024];
//3.准备一个空的DatagramPacket
DatagramPacket packet = new DatagramPacket(byteArray,byteArray.length);
//4.等待信息
socket.receive(packet);
//5.获取信息
byte[] infoArray = packet.getData();
String info = new String(infoArray,0,packet.getLength());
System.out.println("获取的信息:" + info);
//6.释放资源
socket.close();
三.TCP协议编程:
1.发送端:
//1.实例化一个Socket
Socket socket = new Socket("192.168.38.91",8888);
//2.获取输出流
OutputStream out = socket.getOutputStream();
//3.输出,一次输出一个字节数组
out.write("你好".getBytes());
//4.释放资源
out.close();
socket.close();
2.接收端:
//1.实例化一个ServerSocket
ServerSocket server = new ServerSocket(8888);
//2.获取输入流
InputStream in = socket.getInputStream();
//3.一次读取一个字节数组
byte[] byteArray = new byte[1024];
int len = in.read(byteArray);
String s = new String(byteArray,0,len);
System.out.println("接收到的数据:" + s);
//4.释放资源
in.close();
sever.close();
下面我编写了关于多个客户端上传到一个服务器的例子,也算是对前面知识的一个小总结:
package cn.itcast.demo13.TCP练习_关于多个客户端上传到一个服务器的思考;public class Client {public static void main(String[] args) {//模拟10个客户端同时连接服务器for(int i = 1 ; i <= 10 ;i ++){new ClientThread(i).start();}}}
package cn.itcast.demo13.TCP练习_关于多个客户端上传到一个服务器的思考;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStream;import java.net.Socket;public class ClientThread extends Thread {private int index;public ClientThread(int index){this.index = index;}@Overridepublic void run() {//连接服务器try {Socket socket = new Socket("192.168.30.241",8888);//网络输出流OutputStream netOut = socket.getOutputStream();//文件输入流FileInputStream fileIn = new FileInputStream("C:\\ccc\\" + index + ".png");//一次读取一个字节数组byte[] byteArray = new byte[1024];int len = 0;while((len = fileIn.read(byteArray)) != -1){netOut.write(byteArray,0,len);}//释放资源fileIn.close();netOut.close();socket.close();System.out.println("文件:" + index + ".png 上传完毕!");} catch (IOException e) {e.printStackTrace();} }}
package cn.itcast.demo13.TCP练习_关于多个客户端上传到一个服务器的思考;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class Server {public static void main(String[] args) throws IOException{ServerSocket server = new ServerSocket(8888);int index = 1;while(true){Socket socket = server.accept();//启动线程;new ServerThread(index++,socket).start();}}}
package cn.itcast.demo13.TCP练习_关于多个客户端上传到一个服务器的思考;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.Socket;public class ServerThread extends Thread {public int index ;private Socket socket ;//此索引,跟客户端的索引不是一一对应的;public ServerThread(int index,Socket socket){this.index = index;this.socket = socket;}@Overridepublic void run() {//获取网络输入流try {InputStream netIn = socket.getInputStream();FileOutputStream fileOut = new FileOutputStream(index + ".png");byte[] byteArray = new byte[1024];int len = 0;while((len = netIn.read(byteArray)) != -1){fileOut.write(byteArray,0,len);}fileOut.close();netIn.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}//文件的输出流}}
- 黑马程序员-java基础 网络编程
- 黑马程序员---java基础之网络编程
- 黑马程序员 Java基础 ---> 网络编程
- 黑马程序员:Java基础总结----网络编程
- 黑马程序员 java基础回顾---网络编程
- <<黑马程序员>>java基础之网络编程
- 黑马程序员Java基础__网络编程
- 黑马程序员-Java基础-网络编程
- 黑马程序员--java基础--网络编程
- 黑马程序员--Java基础--11网络编程
- 黑马程序员--Java基础总结---网络编程
- 黑马程序员-java基础-网络编程
- 黑马程序员 Java基础 网络编程
- 黑马程序员---java基础之网络编程
- 黑马程序员--JAVA基础之网络编程
- 黑马程序员--Java基础--GUI、网络编程
- 黑马程序员-----java基础网络编程<一>
- 黑马程序员--Java基础之网络编程
- 安卓控件使用系列11:ToggleButton开关控件的使用
- JAVA——GUI鼠标事件
- 二叉树的下一个结点
- 《php和mysql web开发》笔记——第9章 创建Web数据库
- redis教程(二):安装遇到的某些问题
- 黑马程序员---java基础---网络编程
- Set Up VTune Amplifier(windows) 2015 for Remote (linux)Analysis
- [python爬虫] Selenium定向爬取海量精美图片及搜索引擎杂谈
- 关于二进制文件储存格式
- HP QR Code 生成二维码
- 线程间的通信与同步
- ExtJs 格式化字符串:去除行首、行尾空格、换行符
- 2013 ACM-ICPC吉林通化全国邀请赛 && HDU 4499 Cannon (搜索)
- final关键字