当前位置: 首页 > news >正文

影视cms哪个好/郑州网站优化外包顾问

影视cms哪个好,郑州网站优化外包顾问,买东西的平台app有哪些,一个简单的网站怎么做目录 1:网络编程(理解) (3)网络编程的三要素 A:IP地址 IP地址的分类: 两个DOS命令: 特殊的IP地址: B:端口 C:协议 (3)Socket机制 (4)UDP协议发送和接收数据(两案列)(掌握) 案列一:最基本的UDP协议发送和接收数据 案列二&…

目录

1:网络编程(理解)

      (3)网络编程的三要素

A:IP地址

      IP地址的分类:

      两个DOS命令:

      特殊的IP地址:

B:端口

C:协议

      (3)Socket机制

      (4)UDP协议发送和接收数据(两案列)(掌握)

案列一:最基本的UDP协议发送和接收数据

案列二:代码优化

案列三:把发送数据改进为键盘录入

案列四:一个简易聊天小程序并用多线程改进

      (5)TCP协议发送和接收数据(掌握)

案列一:最基本的TCP协议发送和接收数据

案列二:服务器反馈信息

案列三:客户端键盘录入,服务器输出到控制台

案列四:客户端键盘录入,服务器写到文本文件

案列五:客户端文本文件,服务器输出到控制台

案列六:客户端读取文本文件,服务器写到文本文件

案列七:客户端读取文本文件,服务器写到文本文件,并反馈

案列八:上传图片

案列八:多线程上传文件(while循环改进服务器接收多个客户端)

案列九:多线程改进上传文件(while循环加Runnable接口)


1:网络编程(理解)

       (1)网络编程:用Java语言实现计算机间数据的信息传递和资源共享

       (2)网络编程模型

      (3)网络编程的三要素

A:IP地址

       网络中计算机的唯一标识。

       计算机只能识别二进制的数据,所以我们的IP地址应该是一个二进制的数据。

       但是呢,我们配置的IP地址确不是二进制的,为什么呢?

              IP:192.168.1.100

              换算:1100000010101000 00000001 01100100

       假如真是:1100000010101000 00000001 01100100的话。

       我们如果每次再上课的时候要配置该IP地址,记忆起来就比较的麻烦。

       所以,为了方便表示IP地址,我们就把IP地址的每一个字节上的数据换算成十进制,然后用.分开来表示:

              "点分十进制"

       IP地址的组成:网络号段+主机号段

              A类:第一号段为网络号段+后三段的主机号段

                     一个网络号:256*256*256 = 16777216

              B类:前二号段为网络号段+后二段的主机号段

                     一个网络号:256*256 = 65536

              C类:前三号段为网络号段+后一段的主机号段

                     一个网络号:256

      IP地址的分类:

              A类 1.0.0.1---127.255.255.254    

(1)10.X.X.X是私有地址(私有地址就是在互联网上不使用,而被用在局域网络中的地址)                     (2)127.X.X.X是保留地址,用做循环测试用的。

              B类 128.0.0.1---191.255.255.254 172.16.0.0---172.31.255.255是私有地址。169.254.X.X是保留地址。

              C类 192.0.0.1---223.255.255.254 192.168.X.X是私有地址

              D类 224.0.0.1---239.255.255.254       

              E类 240.0.0.1---247.255.255.254

             

      两个DOS命令:

              ipconfig 查看本机ip地址

              ping 后面跟ip地址。测试本机与指定的ip地址间的通信是否有问题

      特殊的IP地址:

              127.0.0.1 回环地址(表示本机)

              x.x.x.255 广播地址

              x.x.x.0 网络地址

 

import java.net.InetAddress;
import java.net.UnknownHostException;
/* 如果一个类没有构造方法:* A:成员全部是静态的(Math,Arrays,Collections)* B:单例设计模式(Runtime)* C:类中有静态方法返回该类的对象(InetAddress)*          classDemo {*                 privateDemo(){}**                 publicstatic Demo getXxx() {*                        returnnew Demo();*                 }*          }* 看InetAddress的成员方法:public static InetAddressgetByName(String host):根据主机名或者IP地址的字符串表示得到IP地址对象*/
public class InetAddressDemo {public static void main(String[] args) throws UnknownHostException {//public static InetAddress getByName(String host)//InetAddress address = InetAddress.getByName("liuyi");//InetAddress address = InetAddress.getByName("192.168.12.92");InetAddress address = InetAddress.getByName("192.168.12.63");//获取两个东西:主机名,IP地址//public String getHostName()String name = address.getHostName();//public String getHostAddress()String ip = address.getHostAddress();System.out.println(name+ "---" + ip);}
}

B:端口

                     是应用程序的标识。

物理端口 网卡口

逻辑端口 我们指的就是逻辑端口

       A:每个网络程序都会至少有一个逻辑端口

       B:用于标识进程的逻辑地址,不同进程的标识

       C:有效端口:0~65535,其中0~1024系统使用或保留端口。

C:协议

                     UDP:数据打包,有限制(大小在限制在64k),不连接,效率高,不可靠

                     TCP:建立数据通道,无限制,效率低,通过三次握手完成连接,是可靠协议

      (3)Socket机制

              Socket套接字:

网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。

Socket原理机制:

通信的两端都有Socket。

网络通信其实就是Socket间的通信。

数据在两个Socket间通过IO传输。

      (4)UDP协议发送和接收数据(两案列)(掌握)

案列一:最基本的UDP协议发送和接收数据

 

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;/* UDP协议发送数据:* A:创建发送端Socket对象* B:创建数据,并把数据打包* C:调用Socket对象的发送方法发送数据包D:释放资源*/
public class SendDemo {public static void main(String[] args) throws IOException {//创建发送端Socket对象//DatagramSocket()DatagramSocket ds = new DatagramSocket();//创建数据,并把数据打包//DatagramPacket(byte[] buf, int length, InetAddress address, int port)//创建数据byte[] bys = "hello,udp,我来了".getBytes();//长度int length = bys.length;//IP地址对象InetAddress address = InetAddress.getByName("192.168.12.92");//端口int port = 10086;DatagramPacket dp = new DatagramPacket(bys, length, address, port);//调用Socket对象的发送方法发送数据包//public void send(DatagramPacket p)ds.send(dp);//释放资源ds.close();}
}

 

 

 

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;/* UDP协议接收数据:* A:创建接收端Socket对象* B:创建一个数据包(接收容器)* C:调用Socket对象的接收方法接收数据* D:解析数据包,并显示在控制台
E:释放资源 */ 
public class ReceiveDemo {public static void main(String[] args) throws IOException {//创建接收端Socket对象//DatagramSocket(int port)DatagramSocket ds = new DatagramSocket(10086);//创建一个数据包(接收容器)//DatagramPacket(byte[] buf, int length)byte[] bys = new byte[1024];int length = bys.length;DatagramPacket dp = new DatagramPacket(bys, length);//调用Socket对象的接收方法接收数据//public void receive(DatagramPacket p)ds.receive(dp);// 阻塞式//解析数据包,并显示在控制台//获取对方的ip//public InetAddress getAddress()InetAddress address = dp.getAddress();String ip = address.getHostAddress();//public byte[] getData():获取数据缓冲区//public int getLength():获取数据的实际长度byte[] bys2 = dp.getData();int len = dp.getLength();String s = new String(bys2, 0, len);System.out.println(ip+ "传递的数据是:" + s);//释放资源ds.close();}
}

案列二:代码优化

 

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class SendDemo {public static void main(String[] args)throws IOException {// 创建发送端的Socket对象DatagramSocket ds = newDatagramSocket();// 创建数据并打包byte[] bys ="helloworld".getBytes();DatagramPacket dp = newDatagramPacket(bys, bys.length,InetAddress.getByName("192.168.12.92"), 12345);// 发送数据ds.send(dp);// 释放资源ds.close();}
}

 

 

 

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;/* 多次启动接收端:*          java.net.BindException:Address already in use: Cannot bind端口被占用。*/ 
public class ReceiveDemo {public static void main(String[] args) throws IOException {//创建接收端的Socket对象DatagramSocket ds = new DatagramSocket(12345);//创建一个包裹byte[] bys = new byte[1024];DatagramPacket dp = new DatagramPacket(bys, bys.length);//接收数据ds.receive(dp);//解析数据String ip = dp.getAddress().getHostAddress();String s = new String(dp.getData(), 0, dp.getLength());System.out.println("from" + ip + " data is : " + s);//释放资源ds.close();}
}

 

案列三:把发送数据改进为键盘录入

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;//* 数据来自于键盘录入//* 键盘录入数据要自己控制录入结束。
public class SendDemo {public static void main(String[] args) throws IOException {//创建发送端的Socket对象DatagramSocket ds = new DatagramSocket();//封装键盘录入数据BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String line = null;while((line = br.readLine()) != null) {if("886".equals(line)) {break;}//创建数据并打包byte[] bys = line.getBytes();//DatagramPacket dp = new DatagramPacket(bys, bys.length,//InetAddress.getByName("192.168.12.92"), 12345);DatagramPacket dp = new DatagramPacket(bys, bys.length,InetAddress.getByName("192.168.12.255"),12345);//发送数据ds.send(dp);}//释放资源ds.close();}
}

 

 

 

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;//* 多次启动接收端://*          java.net.BindException:Address already in use: Cannot bind//*          端口被占用。
public class ReceiveDemo {public static void main(String[] args) throws IOException {//创建接收端的Socket对象DatagramSocket ds = new DatagramSocket(12345);while(true) {//创建一个包裹byte[ ] bys = new byte[1024];DatagramPacket dp = new DatagramPacket(bys, bys.length);//接收数据ds.receive(dp);//解析数据String ip = dp.getAddress().getHostAddress();String s = new String(dp.getData(), 0, dp.getLength());System.out.println("from" + ip + " data is : " + s);}//释放资源//接收端应该一直开着等待接收数据,是不需要关闭//ds.close();}
}

案列四:一个简易聊天小程序并用多线程改进

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class SendThread implementsRunnable {private DatagramSocket ds;public SendThread(DatagramSocket ds) {this.ds= ds;}@Overridepublic void run() {try{//封装键盘录入数据BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String line = null;while((line = br.readLine()) != null) {if("886".equals(line)) {break;}//创建数据并打包byte[] bys = line.getBytes();//DatagramPacket dp = new DatagramPacket(bys, bys.length,//InetAddress.getByName("192.168.12.92"), 12345);DatagramPacket dp = new DatagramPacket(bys, bys.length,InetAddress.getByName("192.168.12.255"),12306);//发送数据ds.send(dp);}//释放资源ds.close();}catch (IOException e) {e.printStackTrace();}}
}

 

 

 

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class ReceiveThreadimplements Runnable {private DatagramSocket ds;public ReceiveThread(DatagramSocket ds) {this.ds= ds;}@Overridepublic void run() {try{while(true) {//创建一个包裹byte[] bys = new byte[1024];DatagramPacket dp = new DatagramPacket(bys, bys.length);//接收数据ds.receive(dp);//解析数据String ip = dp.getAddress().getHostAddress();String s = new String(dp.getData(), 0, dp.getLength());System.out.println("from" + ip + " data is : " + s);}}catch (IOException e) {e.printStackTrace();}}
}

 

 

 

import java.io.IOException;
import java.net.DatagramSocket;//* 通过多线程改进刚才的聊天程序,这样我就可以实现在一个窗口发送和接收数据了
public class ChatRoom {public static void main(String[] args) throws IOException {DatagramSocket dsSend = new DatagramSocket();DatagramSocket dsReceive = new DatagramSocket(12306);SendThread st = new SendThread(dsSend);ReceiveThread rt = new ReceiveThread(dsReceive);Thread t1 = new Thread(st);Thread t2 = new Thread(rt);t1.start();t2.start();}
}

      (5)TCP协议发送和接收数据(掌握)

案列一:最基本的TCP协议发送和接收数据

 

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;/* TCP协议发送数据:* A:创建发送端的Socket对象*          这一步如果成功,就说明连接已经建立成功了。* B:获取输出流,写数据* C:释放资源* 连接被拒绝。TCP协议一定要先看服务器。java.net.ConnectException: Connectionrefused: connect*/ 
public class ClientDemo {public static void main(String[] args) throws IOException {//创建发送端的Socket对象//Socket(InetAddress address, int port)//Socket(String host, int port)//Socket s = new Socket(InetAddress.getByName("192.168.12.92"), 8888);Sockets = new Socket("192.168.12.92", 8888);//获取输出流,写数据//public OutputStream getOutputStream()OutputStream os = s.getOutputStream();os.write("hello,tcp,我来了".getBytes());//释放资源s.close();}
}

 

 

 

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
/ * TCP协议接收数据:* A:创建接收端的Socket对象* B:监听客户端连接。返回一个对应的Socket对象* C:获取输入流,读取数据显示在控制台D:释放资源*/
public class ServerDemo {public static void main(String[] args) throws IOException {//创建接收端的Socket对象//ServerSocket(int port)ServerSocket ss = new ServerSocket(8888);//监听客户端连接。返回一个对应的Socket对象//public Socket accept()Sockets = ss.accept(); // 侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。//获取输入流,读取数据显示在控制台InputStream is = s.getInputStream();byte[] bys = new byte[1024];int len = is.read(bys); // 阻塞式方法String str = new String(bys, 0, len);String ip = s.getInetAddress().getHostAddress();System.out.println(ip+ "---" + str);//释放资源s.close();//ss.close(); //这个不应该关闭}
}

 

案列二:服务器馈信息

 

 

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class ClientDemo {public static void main(String[] args) throws IOException {//创建客户端Socket对象Socket s = new Socket("192.168.12.92", 9999);//获取输出流OutputStream os = s.getOutputStream();os.write("今天天气很好,适合睡觉".getBytes());//获取输入流InputStream is = s.getInputStream();byte[] bys = new byte[1024];int len = is.read(bys);// 阻塞String client = new String(bys, 0, len);System.out.println("client:"+ client);//释放资源s.close();}
}

 

 

 

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {public static void main(String[] args) throws IOException {//创建服务器Socket对象ServerSocket ss = new ServerSocket(9999);//监听客户端的连接Socket s = ss.accept(); // 阻塞//获取输入流InputStream is = s.getInputStream();byte[] bys = new byte[1024];int len = is.read(bys); // 阻塞String server = new String(bys, 0, len);System.out.println("server:"+ server);//获取输出流OutputStream os = s.getOutputStream();os.write("数据已经收到".getBytes());//释放资源s.close();//ss.close();    }
}

 

案列三:客户端键盘录入,服务器输出到控制台

 

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;//* 客户端键盘录入,服务器输出到控制台
public class ClientDemo {public static void main(String[] args) throws IOException {//创建客户端Socket对象Socket s = new Socket("192.168.12.92", 22222);//键盘录入数据BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//把通道内的流给包装一下BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line = null;while((line = br.readLine()) != null) {//键盘录入数据要自定义结束标记if("886".equals(line)) {break;}bw.write(line);bw.newLine();bw.flush();}//释放资源//bw.close();//br.close();s.close();}
}

 

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {public static void main(String[] args) throws IOException {//创建服务器Socket对象ServerSocket ss = new ServerSocket(22222);//监听客户端连接Socket s = ss.accept();//包装通道内容的流BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));String line = null;while((line = br.readLine()) != null) {System.out.println(line);}//br.close();s.close();//ss.close();}
}

案列四:客户端键盘录入,服务器写到文本文件

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
// * 客户端键盘录入,服务器输出文本文件
public class ClientDemo {public static void main(String[] args) throws IOException {//创建客户端Socket对象Socket s = new Socket("192.168.12.92", 23456);//封装键盘录入BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//封装通道内的数据BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line = null;while((line = br.readLine()) != null) {if("over".equals(line)) {break;}bw.write(line);bw.newLine();bw.flush();}//bw.close();//br.close();s.close();}
}

 

 

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {public static void main(String[] args) throws IOException {//创建服务器Socket对象ServerSocket ss = new ServerSocket(23456);//监听客户端连接Socket s = ss.accept();//封装通道内的数据BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));//封装文本文件BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));String line = null;while((line = br.readLine()) != null) {bw.write(line);bw.newLine();bw.flush();}bw.close();//br.close();s.close();//ss.close();}
}

案列五:客户端文本文件,服务器输出到控制台

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;//* 客户端文本文件,服务器输出到控制台
public class ClientDemo {public static void main(String[] args) throws IOException {//创建Socket对象Socket s = new Socket("192.168.12.92", 34567);//封装文本文件BufferedReader br = new BufferedReader(new FileReader("InetAddressDemo.java"));//封装通道内的流BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line = null;while((line = br.readLine()) != null) {bw.write(line);bw.newLine();bw.flush();}br.close();s.close();}
}

 

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {public static void main(String[] args) throws IOException {//创建服务器Socket对象ServerSocket ss = new ServerSocket(34567);//监听客户端连接Socket s = ss.accept();//封装通道内的流BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));String line = null;while((line = br.readLine()) != null) {System.out.println(line);}s.close();}
}

案列六:客户端读取文本文件,服务器写到文本文件

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class UploadClient {public static void main(String[] args) throws IOException {//创建客户端Socket对象Socket s = new Socket("192.168.12.92", 11111);//封装文本文件BufferedReader br = new BufferedReader(new FileReader("InetAddressDemo.java"));//封装通道内流BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line = null;while((line = br.readLine()) != null) {bw.write(line);bw.newLine();bw.flush();}//释放资源br.close();s.close();}
}

 

 

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class UploadServer {public static void main(String[] args) throws IOException {//创建服务器端的Socket对象ServerSocket ss = new ServerSocket(11111);//监听客户端连接Socket s = ss.accept();//封装通道内的流BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));//封装文本文件BufferedWriter bw = new BufferedWriter(new FileWriter("Copy.java"));String line = null;while((line = br.readLine()) != null) {bw.write(line);bw.newLine();bw.flush();}bw.close();s.close();}
}

案列七:客户端读取文本文件,服务器写到文本文件,并反馈

 

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;/* 按照我们正常的思路加入反馈信息,结果却没反应。为什么呢?* 读取文本文件是可以以null作为结束信息的,但是呢,通道内是不能这样结束信息的。* 所以,服务器根本就不知道你结束了。而你还想服务器给你反馈。所以,就相互等待了。* 如何解决呢?* A:在多写一条数据,告诉服务器,读取到这条数据说明我就结束,你也结束吧。*          这样做可以解决问题,但是不好。* B:Socket对象提供了一种解决方案public void shutdownOutput()*/
public class UploadClient {public static void main(String[] args)throws IOException {// 创建客户端Socket对象Socket s = newSocket("192.168.12.92", 11111);// 封装文本文件BufferedReader br = newBufferedReader(new FileReader("InetAddressDemo.java"));// 封装通道内流BufferedWriter bw = newBufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line = null;while ((line = br.readLine()) !=null) { // 阻塞bw.write(line);bw.newLine();bw.flush();}//自定义一个结束标记
//            bw.write("over");
//            bw.newLine();
//            bw.flush();//Socket提供了一个终止,它会通知服务器你别等了,我没有数据过来了s.shutdownOutput();// 接收反馈BufferedReader brClient = newBufferedReader(new InputStreamReader(s.getInputStream()));String client =brClient.readLine(); // 阻塞System.out.println(client);// 释放资源br.close();s.close();}
}

 

 

 

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class UploadServer {public static void main(String[] args)throws IOException {// 创建服务器端的Socket对象ServerSocket ss = newServerSocket(11111);// 监听客户端连接Socket s = ss.accept();// 阻塞// 封装通道内的流BufferedReader br = newBufferedReader(new InputStreamReader(s.getInputStream()));// 封装文本文件BufferedWriter bw = newBufferedWriter(new FileWriter("Copy.java"));String line = null;while ((line = br.readLine()) !=null) { // 阻塞//if("over".equals(line)){// break;// }bw.write(line);bw.newLine();bw.flush();}// 给出反馈BufferedWriter bwServer = newBufferedWriter(new OutputStreamWriter(s.getOutputStream()));bwServer.write("文件上传成功");bwServer.newLine();bwServer.flush();// 释放资源bw.close();s.close();}
}

案列八:上传图片

 

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class UploadClient {public static void main(String[] args)throws IOException {// 创建客户端Socket对象Socket s = newSocket("192.168.12.92", 19191);// 封装图片文件BufferedInputStream bis = newBufferedInputStream(new FileInputStream("林青霞.jpg"));// 封装通道内的流BufferedOutputStream bos = newBufferedOutputStream(s.getOutputStream());byte[] bys = new byte[1024];int len = 0;while ((len = bis.read(bys)) !=-1) {bos.write(bys, 0, len);bos.flush();}s.shutdownOutput();// 读取反馈InputStream is =s.getInputStream();byte[] bys2 = new byte[1024];int len2 = is.read(bys2);String client = new String(bys2,0, len2);System.out.println(client);// 释放资源bis.close();s.close();}
}

 

 

 

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class UploadServer {public static void main(String[] args)throws IOException {// 创建服务器Socket对象ServerSocket ss = new ServerSocket(19191);// 监听客户端连接Socket s = ss.accept();// 封装通道内流BufferedInputStream bis = newBufferedInputStream(s.getInputStream());// 封装图片文件BufferedOutputStream bos = newBufferedOutputStream(new FileOutputStream("mn.jpg"));byte[] bys = new byte[1024];int len = 0;while ((len = bis.read(bys)) !=-1) {bos.write(bys, 0, len);bos.flush();}// 给一个反馈OutputStream os =s.getOutputStream();os.write("图片上传成功".getBytes());bos.close();s.close();}
}

案列八:多线程上传文件(while循环改进服务器接收多个客户端)

 

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;
public classUploadClient {public static void main(String[] args)throws IOException {// 创建客户端Socket对象Socket s = newSocket("192.168.12.92", 11111);// 封装文本文件BufferedReader br = newBufferedReader(new FileReader("InetAddressDemo.java"));// 封装通道内流BufferedWriter bw = newBufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line = null;while ((line = br.readLine()) !=null) { // 阻塞bw.write(line);bw.newLine();bw.flush();}// Socket提供了一个终止,它会通知服务器你别等了,我没有数据过来了s.shutdownOutput();// 接收反馈BufferedReader brClient = newBufferedReader(new InputStreamReader(s.getInputStream()));String client =brClient.readLine(); // 阻塞System.out.println(client);// 释放资源br.close();s.close();}
}

 

 

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;/* 通过while循环可以改进一个服务器接收多个客户端。* 但是这个是有问题的。* 如果是这种情况,假设我还有张三,李四,王五这三个人分别执行客户端* 张三:好好学习.avi(100M)                 256k* 李四:天天向上.mp3(3M)                   1M王五:ILoveJava.txt(1k)                      100M*/
public class UploadServer {public static void main(String[] args)throws IOException {// 创建服务器端的Socket对象ServerSocket ss = newServerSocket(11111);while (true) {// 监听客户端连接Socket s = ss.accept();// 阻塞// 封装通道内的流BufferedReader br = newBufferedReader(new InputStreamReader(s.getInputStream()));// 封装文本文件BufferedWriter bw = newBufferedWriter(new FileWriter("Copy.java"));String line = null;while ((line =br.readLine()) != null) { // 阻塞bw.write(line);bw.newLine();bw.flush();}// 给出反馈BufferedWriter bwServer =new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));bwServer.write("文件上传成功");bwServer.newLine();bwServer.flush();// 释放资源bw.close();s.close();        }     }    
}

案列九:多线程改进上传文件(while循环加Runnable接口)

 

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;
public class UploadClient {public static void main(String[] args)throws IOException {// 创建客户端Socket对象Socket s = newSocket("192.168.12.92", 11111);// 封装文本文件// BufferedReader br = newBufferedReader(new FileReader("InetAddressDemo.java"));BufferedReader br = newBufferedReader(new FileReader("ReceiveDemo.java"));// 封装通道内流BufferedWriter bw = newBufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line = null;while ((line = br.readLine()) !=null) { // 阻塞bw.write(line);bw.newLine();bw.flush();}// Socket提供了一个终止,它会通知服务器你别等了,我没有数据过来了s.shutdownOutput();// 接收反馈BufferedReader brClient = newBufferedReader(new InputStreamReader(s.getInputStream()));String client = brClient.readLine();// 阻塞System.out.println(client);// 释放资源br.close();s.close();        }
}

 

 

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class UserThread implements Runnable {private Socket s;public UserThread(Socket s) {this.s = s;}@Overridepublic void run() {try {// 封装通道内的流BufferedReader br = newBufferedReader(new InputStreamReader(s.getInputStream()));// 封装文本文件// BufferedWriter bw = newBufferedWriter(new// FileWriter("Copy.java"));// 为了防止名称冲突String newName =System.currentTimeMillis() + ".java";BufferedWriter bw = newBufferedWriter(new FileWriter(newName));String line = null;while ((line =br.readLine()) != null) { // 阻塞bw.write(line);bw.newLine();bw.flush();}// 给出反馈BufferedWriter bwServer =new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));bwServer.write("文件上传成功");bwServer.newLine();bwServer.flush();// 释放资源bw.close();s.close();} catch (IOException e) {e.printStackTrace();}}
}

 

 

 

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class UploadServer {public static void main(String[] args) throws IOException {//创建服务器Socket对象ServerSocket ss = new ServerSocket(11111);while(true) {Socket s = ss.accept();newThread(new UserThread(s)).start();}}
}

http://www.jmfq.cn/news/4814965.html

相关文章:

  • 甘肃兰州网站建设/hs网站推广
  • 用java做网站可以/关键词优化排名用什么软件比较好
  • 沈阳网站建设优化企业/学校教育培训机构
  • 软文自助发稿软件开发 网站建设/百度推广系统营销平台
  • 做网站怎么导入地图/百度竞价广告怎么投放
  • 网站建设行业背景/谷歌推广平台
  • 公司只有一个设计师/优化网站排名解析推广
  • 网站建设seo运营规划/微信引流推广怎么找平台
  • 专门做游戏的网站/中国站长之家域名查询
  • ip地址做网站/河南网站定制
  • 结合实际/浙江seo技术培训
  • c网站开发源代码/哪家竞价托管专业
  • 大型平台网站开发/app推广软文范文
  • 韩国唯美网站设计/seo排名分析
  • 移动互联网开发技术学什么/seo查询是什么意思
  • 哪些网站专门做动漫的/郑州官网网站推广优化公司
  • 现在有男的做外围女网站客服吗/网络营销服务公司
  • 怎么在网站上做视频/谷歌浏览器网页版入口手机版
  • 对外宣传网站建设方案/深圳网络推广软件
  • 做视频网站需要多大空间/百度北京分公司官网
  • 郑州网站建设设计公司/网络seo首页
  • 上海门户网站一网通办/长沙seo优化
  • 怎么把做的网站传/百度广告投诉电话
  • 网站建设竞价托管服务/济南做seo外包
  • 目前流行的网页设计风格包括/长沙企业关键词优化
  • 雨花台网站建设/中国网站排名
  • 企业电子商城网站建设/seo关键词排优化软件
  • 在万网申请的域名_需要把万网的账户密码给做网站的吗/购物网站大全
  • 用苹果cms做电影网站/百度收录查询
  • 做常州美食网站首页的背景图/优化seo软件