TCP实例一
文章来源:http://blog.csdn.net/webrobot/article/details/7425078
- packagecom.nbchina.tcp1;
- importjava.io.IOException;
- importjava.io.OutputStream;
- importjava.net.Socket;
- publicclassTcpClinet{
- publicstaticvoidmain(String[]args)throwsException,IOException{
- Sockets=newSocket("192.168.1.68",10003);
- OutputStreamout=s.getOutputStream();
- out.write("Tcpsenddata...".getBytes());
- s.close();
- }
- }
- packagecom.nbchina.tcp1;
- importjava.io.IOException;
- importjava.io.InputStream;
- importjava.net.ServerSocket;
- importjava.net.Socket;
- //服务端、客户端通讯,服务端守候并显示客户端发来的信息
- publicclassTcpServer{
- publicstaticvoidmain(String[]args)throwsIOException{
- //建立服务端socket服务,并监听一个端口
- ServerSocketss=newServerSocket(10003);
- //通过accept方法获取连接来的客户端对象
- Sockets=ss.accept();
- Stringip=s.getInetAddress().getHostAddress();
- System.out.println(ip+"...connected");
- //获取客户端发来的数据
- InputStreamis=s.getInputStream();
- byte[]buf=newbyte[1024];
- intlen=is.read(buf);
- System.out.println(newString(buf,0,len));
- s.close();//关闭客户端。服务端关的不是自己。是客户端。
- ss.close();//关闭服务端
- }
- }
TCP实例二
- packagecom.nbchina.tcp2;
- importjava.io.InputStream;
- importjava.io.OutputStream;
- importjava.net.Socket;
- publicclassTcpClinet{
- publicstaticvoidmain(String[]args)throwsException{
- Sockets=newSocket("192.168.1.68",10008);
- OutputStreamout=s.getOutputStream();
- out.write("Tcpsenddata...".getBytes());
- InputStreamis=s.getInputStream();
- byte[]buf=newbyte[1024];
- intlen=is.read(buf);
- System.out.println(newString(buf,0,len));
- s.close();
- }
- }
- packagecom.nbchina.tcp2;
- importjava.io.InputStream;
- importjava.io.OutputStream;
- importjava.net.ServerSocket;
- importjava.net.Socket;
- //客户端、服务端通讯互相发送消息
- publicclassTcpServer{
- publicstaticvoidmain(String[]args)throwsException{
- //建立服务端socket服务,并监听一个端口
- ServerSocketss=newServerSocket(10008);
- //通过accept方法获取连接来的客户端对象
- Sockets=ss.accept();
- Stringip=s.getInetAddress().getHostAddress();
- System.out.println(ip+"...connected");
- //获取客户端发来的数据
- InputStreamis=s.getInputStream();
- byte[]buf=newbyte[1024];
- intlen=is.read(buf);
- System.out.println(newString(buf,0,len));
- OutputStreamout=s.getOutputStream();
- out.write("收到客户端发来的信息".getBytes());
- s.close();//关闭客户端。服务端关的不是自己。是客户端。
- ss.close();//关闭服务端
- }
- }
TCP实例三
- packagecom.nbchina.tcp3;
- importjava.io.BufferedReader;
- importjava.io.BufferedWriter;
- importjava.io.InputStreamReader;
- importjava.io.OutputStreamWriter;
- importjava.io.PrintWriter;
- importjava.net.Socket;
- publicclassTcpClinet{
- publicstaticvoidmain(String[]args)throwsException{
- Sockets=newSocket("192.168.1.2",10008);
- BufferedReaderbufr=newBufferedReader(newInputStreamReader(System.in));
- //BufferedWriterbufOut=newBufferedWriter(newOutputStreamWriter(s.getOutputStream()));
- BufferedReaderbufIn=newBufferedReader(newInputStreamReader(s.getInputStream()));
- PrintWriterout=newPrintWriter(s.getOutputStream(),true);
- Stringline=null;
- while((line=bufr.readLine())!=null){
- if("over".equals(line)){
- break;
- }
- out.println(line);
- /*bufOut.write(line);
- bufOut.newLine();
- bufOut.flush();*/
- Stringstr=bufIn.readLine();
- System.out.println("server:"+str);
- }
- bufr.close();
- s.close();
- }
- }
- packagecom.nbchina.tcp3;
- importjava.io.BufferedReader;
- importjava.io.BufferedWriter;
- importjava.io.InputStreamReader;
- importjava.io.OutputStreamWriter;
- importjava.io.PrintWriter;
- importjava.net.ServerSocket;
- importjava.net.Socket;
- //客户端、服务端通讯互相发送消息
- /*
- *要求建立一个文本转换服务端
- *客户端发给服务端文本,服务端将文本转换为大写返回给客户端。
- *而且客户端可以不断的进行文本转换,当客户端输入over时,转换结束。
- *分析:
- *客户端:
- *既然是操作设备上的数据,可以用io技术,并按照io的操作规则来思考。
- *源:键盘录入
- *目的:网络设备,网络输出流。
- *而且操作的是文本数据,可以选择字符流。
- *
- *步骤
- *1、建立服务
- *2、获取键盘录入
- *3、将数据发给服务端
- *4、服务端返回大写数据
- *5、结束、关闭资源
- *
- *都是文本数据,可以使用字符流进行操作,同时提高效率,加入缓冲。
- *
- */
- publicclassTcpServer{
- publicstaticvoidmain(String[]args)throwsException{
- //建立服务端socket服务,并监听一个端口
- ServerSocketss=newServerSocket(10008);
- //通过accept方法获取连接来的客户端对象
- Sockets=ss.accept();
- Stringip=s.getInetAddress().getHostAddress();
- System.out.println(ip+"...connected");
- BufferedReaderbufIn=newBufferedReader(newInputStreamReader(s.getInputStream()));
- //BufferedWriterbufOut=newBufferedWriter(newOutputStreamWriter(s.getOutputStream()));
- //既可以接受字节流又可以接受字符流
- //PrintWriterout=newPrintWriter(s.getOutputStream(),true);
- PrintWriterout=newPrintWriter(s.getOutputStream(),true);
- Stringline=null;
- while((line=bufIn.readLine())!=null){
- out.println(line.toUpperCase());
- /*bufOut.write(line.toUpperCase());
- bufOut.newLine();
- bufOut.flush();*/
- }
- s.close();//关闭客户端。服务端关的不是自己。是客户端。
- ss.close();//关闭服务端
- }
- }
TCP实例四
- packagecom.nbchina.tcp4;
- importjava.io.BufferedReader;
- importjava.io.FileReader;
- importjava.io.InputStreamReader;
- importjava.io.PrintWriter;
- importjava.net.Socket;
- //通过tcp复制文本文件。
- //注意使用流结束标志。
- //一般使用流结束标志。也可以自定义标志。
- publicclassTcpClinet{
- publicstaticvoidmain(String[]args)throwsException{
- Sockets=newSocket("192.168.1.2",10008);
- BufferedReaderbufr=newBufferedReader(newFileReader("IPDeom.java"));
- PrintWriterout=newPrintWriter(s.getOutputStream(),true);
- /*DataOutputStreamdos=newDataOutputStream(s.getOutputStream());
- longtime=System.currentTimeMillis();
- dos.writeLong(time);*/
- Stringline=null;
- while((line=bufr.readLine())!=null){
- out.println(line);
- }
- s.shutdownOutput();//一般使用关闭客户端输出流,相当于给流加入一个结束标记
- //dos.writeLong(time);//使用时间戳作为结束标志
- //out.println("over");//输出结束,供服务端判断。否则双方都在等待
- BufferedReaderbufIn=newBufferedReader(newInputStreamReader(s.getInputStream()));
- Stringstr=bufIn.readLine();
- System.out.println("server:"+str);
- bufr.close();
- s.close();
- }
- }
- packagecom.nbchina.tcp4;
- importjava.io.BufferedReader;
- importjava.io.DataInputStream;
- importjava.io.FileWriter;
- importjava.io.InputStreamReader;
- importjava.io.PrintWriter;
- importjava.net.ServerSocket;
- importjava.net.Socket;
- //(TCP复制文件)
- /*
- *
- */
- publicclassTcpServer{
- publicstaticvoidmain(String[]args)throwsException{
- //建立服务端socket服务,并监听一个端口
- ServerSocketss=newServerSocket(10008);
- //通过accept方法获取连接来的客户端对象
- Sockets=ss.accept();
- Stringip=s.getInetAddress().getHostAddress();
- System.out.println(ip+"...connected");
- DataInputStreamdis=newDataInputStream(s.getInputStream());
- longl=dis.readLong();
- BufferedReaderbufIn=newBufferedReader(newInputStreamReader(s.getInputStream()));
- PrintWriterout=newPrintWriter(newFileWriter("server.txt"),true);
- Stringline=null;
- while((line=bufIn.readLine())!=null){
- /*if("over".equals(line))
- break;*/
- out.println(line);
- }
- PrintWriterpw=newPrintWriter(s.getOutputStream(),true);
- pw.println("上传成功");
- out.close();
- s.close();//关闭客户端。服务端关的不是自己。是客户端。
- ss.close();//关闭服务端
- }
- }
TCP实例五
- packagecom.nbchina.tcp5;
- importjava.io.FileInputStream;
- importjava.io.InputStream;
- importjava.io.OutputStream;
- importjava.net.Socket;
- //通过tcp复制图片文件。
- publicclassTcpClinet{
- publicstaticvoidmain(String[]args)throwsException{
- Sockets=newSocket("192.168.1.2",10008);
- FileInputStreamfis=newFileInputStream("1.bmp");
- OutputStreamout=s.getOutputStream();
- byte[]buf=newbyte[1024];
- intlen=0;
- while((len=fis.read(buf))!=-1){
- out.write(buf,0,len);
- }
- s.shutdownOutput();
- InputStreamin=s.getInputStream();
- byte[]bufIn=newbyte[1024];
- intnum=in.read(bufIn);
- System.out.println(newString(bufIn,0,num));
- fis.close();
- s.close();
- }
- }
- packagecom.nbchina.tcp5;
- importjava.io.FileOutputStream;
- importjava.io.InputStream;
- importjava.io.OutputStream;
- importjava.net.ServerSocket;
- importjava.net.Socket;
- /*
- *单人上传图片
- */
- publicclassTcpServer{
- publicstaticvoidmain(String[]args)throwsException{
- //建立服务端socket服务,并监听一个端口
- ServerSocketss=newServerSocket(10008);
- //通过accept方法获取连接来的客户端对象
- Sockets=ss.accept();
- Stringip=s.getInetAddress().getHostAddress();
- System.out.println(ip+"...connected");
- InputStreamin=s.getInputStream();
- FileOutputStreamfos=newFileOutputStream("server.bmp");
- byte[]buf=newbyte[1024];
- intlen=0;
- while((len=in.read(buf))!=-1){
- fos.write(buf,0,len);
- }
- OutputStreamout=s.getOutputStream();
- out.write("上传成功".getBytes());
- fos.close();
- s.close();//关闭客户端。服务端关的不是自己。是客户端。
- ss.close();//关闭服务端
- }
- }
TCP实例六
- packagecom.nbchina.tcp6;
- importjava.io.File;
- importjava.io.FileInputStream;
- importjava.io.InputStream;
- importjava.io.OutputStream;
- importjava.net.Socket;
- //通过tcp复制图片文件。
- publicclassTcpClinet{
- publicstaticvoidmain(String[]args)throwsException{
- if(args.length!=1){
- System.out.println("请选择一个jpg格式的图片");
- return;
- }
- Filefile=newFile(args[0]);
- if(!(file.exists()&&file.isFile())){
- System.out.println("该文件有问题,不存在或者不是文件");
- return;
- }
- if(!file.getName().endsWith(".jpg")){
- System.out.println("格式错误");
- return;
- }
- if(file.length()>1024*1024*5){
- System.out.println("文件过大");
- return;
- }
- Sockets=newSocket("192.168.1.2",10008);
- FileInputStreamfis=newFileInputStream(file);
- OutputStreamout=s.getOutputStream();
- byte[]buf=newbyte[1024];
- intlen=0;
- while((len=fis.read(buf))!=-1){
- out.write(buf,0,len);
- }
- s.shutdownOutput();
- InputStreamin=s.getInputStream();
- byte[]bufIn=newbyte[1024];
- intnum=in.read(bufIn);
- System.out.println(newString(bufIn,0,num));
- fis.close();
- s.close();
- }
- }
- packagecom.nbchina.tcp6;
- importjava.io.File;
- importjava.io.FileOutputStream;
- importjava.io.InputStream;
- importjava.io.OutputStream;
- importjava.net.ServerSocket;
- importjava.net.Socket;
- /*
- *并发上传图片
- */
- classPicTreadimplementsRunnable{
- privateSockets;
- PicTread(Sockets){
- this.s=s;
- }
- publicvoidrun(){
- intcount=1;
- Stringip=s.getInetAddress().getHostAddress();
- try{
- System.out.println(ip+"...connected");
- InputStreamin=s.getInputStream();
- Filefile=newFile(ip+"("+(count)+")"+".jpg");
- while(file.exists()){
- file=newFile(ip+"("+(count)+")"+".jpg");
- }
- FileOutputStreamfos=newFileOutputStream(file);
- byte[]buf=newbyte[1024];
- intlen=0;
- while((len=in.read(buf))!=-1){
- fos.write(buf,0,len);
- }
- OutputStreamout=s.getOutputStream();
- out.write((ip+"上传成功").getBytes());
- fos.close();
- s.close();//关闭客户端。服务端关的不是自己。是客户端。
- }catch(Exceptione){
- thrownewRuntimeException(ip+"上传失败");
- }
- }
- }
- publicclassTcpServer{
- publicstaticvoidmain(String[]args)throwsException{
- //建立服务端socket服务,并监听一个端口
- ServerSocketss=newServerSocket(10008);
- while(true){
- Sockets=ss.accept();
- newThread(newPicTread(s)).start();
- }
- //ss.close();//关闭服务端
- }
- }
TCP实例七
- packagecom.nbchina.tcp7;
- importjava.io.BufferedReader;
- importjava.io.InputStreamReader;
- importjava.io.PrintWriter;
- importjava.net.Socket;
- //通过tcp登录
- publicclassTcpClinet{
- publicstaticvoidmain(String[]args)throwsException{
- Sockets=newSocket("192.168.1.2",10008);
- BufferedReaderbufr=newBufferedReader(newInputStreamReader(System.in));
- PrintWriterout=newPrintWriter(s.getOutputStream(),true);
- BufferedReaderbufIn=newBufferedReader(newInputStreamReader(s.getInputStream()));
- for(intx=0;x<3;x++){
- Stringline=bufr.readLine();
- if(line==null)
- break;
- out.println(line);
- Stringinfo=bufIn.readLine();
- System.out.println("info:"+info);
- if(info.contains("欢迎")){
- break;
- }
- }
- bufr.close();
- s.close();
- }
- }
- packagecom.nbchina.tcp7;
- importjava.io.BufferedReader;
- importjava.io.FileReader;
- importjava.io.InputStreamReader;
- importjava.io.PrintWriter;
- importjava.net.ServerSocket;
- importjava.net.Socket;
- /*
- *
- */
- classUserTreadimplementsRunnable{
- privateSockets;
- UserTread(Sockets){
- this.s=s;
- }
- publicvoidrun(){
- Stringip=s.getInetAddress().getHostAddress();
- System.out.println(ip+"...connected");
- try{
- for(intx=0;x<3;x++){
- BufferedReaderbufIn=newBufferedReader(newInputStreamReader(s.getInputStream()));
- Stringname=bufIn.readLine();
- if(name==null){
- break;
- }
- BufferedReaderbufr=newBufferedReader(newFileReader("user.txt"));
- PrintWriterout=newPrintWriter(s.getOutputStream(),true);
- Stringline=null;
- booleanflag=false;
- while((line=bufr.readLine())!=null){
- if(line.equals(name)){
- flag=true;
- break;
- }
- }
- if(flag){
- System.out.println(name+"已经登录");
- out.println(name+"欢迎光临");
- break;
- }else{
- System.out.println(name+"尝试登录");
- out.println(name+"不存在");
- }
- }
- s.close();//关闭客户端。服务端关的不是自己。是客户端。
- }catch(Exceptione){
- thrownewRuntimeException(ip+"登录失败");
- }
- }
- }
- publicclassTcpServer{
- publicstaticvoidmain(String[]args)throwsException{
- //建立服务端socket服务,并监听一个端口
- ServerSocketss=newServerSocket(10008);
- while(true){
- Sockets=ss.accept();
- newThread(newUserTread(s)).start();
- }
- //ss.close();//关闭服务端
- }
- }
TCP实例八 ---->服务消息转换
- packagecom.nbchina.tcp.client;
- importjava.io.BufferedReader;
- importjava.io.DataInputStream;
- importjava.io.DataOutputStream;
- importjava.io.IOException;
- importjava.io.InputStreamReader;
- importjava.net.InetAddress;
- importjava.net.Socket;
- importjava.util.logging.Level;
- importjava.util.logging.Logger;
- importcom.nbchina.tcp.server.Server;
- /**
- *此类模拟客户端发出更新请求,在运行期间会要求用户输入指令码
- *举例:输入FDFCF802AAAAAAAAAAAAAAAAAAAAAAAA0000X,详细查看《端口与服务器通讯协议》
- *此类可以多次运行,从而模拟多个终端如果输入的指令码错误,服务器将不予解析
- *
- */
- publicclassClient{
- protectedstaticLoggerlogger=Logger.getLogger(Server.class.getName());
- static{
- logger.setLevel(Level.ALL);//查看所有跟踪信息
- }
- publicvoidcall(){
- intp=0;
- DataInputStreamin;
- DataOutputStreamout;
- Socketsocket=null;
- try{
- socket=newSocket(InetAddress.getByName(null),Server.PORT_SERVER);
- /*
- *确保一个进程关闭Socket后,即使他还未释放端口,同一个主机的其他进程还可以立即重用该端口,
- *可调用socket.setReuseAddress(true),默认false
- */
- socket.setReuseAddress(true);
- p=socket.getLocalPort();//获取本地TCP端口,用于区分不同的客户端
- logger.info("新建客户端连接@"+p);
- in=newDataInputStream(socket.getInputStream());
- out=newDataOutputStream(socket.getOutputStream());
- System.out.print("请输入指令字符串(以回车键结束,以FDFCF8开头):");
- BufferedReaderline=newBufferedReader(newInputStreamReader(
- System.in));
- Strings=line.readLine();
- //将字符串转换成字节数组
- for(intii:s2a(s)){
- out.write(ii);
- }
- out.flush();
- socket.shutdownOutput();//发送指令完毕
- //接收服务端响应
- StringBuffersb=newStringBuffer();
- while(true){
- try{
- intb=in.readUnsignedByte();
- sb.append(Integer.toHexString(b));
- }catch(Exceptione){
- break;
- }
- }
- sb.insert(0,"收到了服务器响应:");
- System.out.println(sb.toString().toUpperCase());
- in.close();
- out.close();
- logger.info("客户端关闭@"+p);
- }catch(IOExceptione){
- logger.severe(e.getMessage());
- e.printStackTrace();
- }finally{
- try{
- if(socket!=null)
- socket.close();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }
- }
- publicstaticvoidmain(String[]args){
- newClient().call();
- //int[]b=GportClient.s2a("20EFD23FE");
- //for(intbi:b){
- //System.out.println(bi);
- //}
- }
- staticint[]s2a(Strings){
- if(s==null||"".equals(s))returnnewint[0];
- StringBuffersb=newStringBuffer(s);
- int[]ba=newint[sb.length()/2+sb.length()%2];
- intl=sb.length();
- for(inti=0,c=0;i<l;i++,c++){
- Stringtmp=""+sb.charAt(i++);
- if(i<l)
- tmp+=sb.charAt(i);
- ba[c]=Integer.parseInt(tmp,16);
- }
- returnba;
- }
- }
- packagecom.nbchina.tcp.server;
- importjava.io.IOException;
- importjava.net.InetAddress;
- importjava.net.ServerSocket;
- importjava.net.Socket;
- importjava.util.logging.Level;
- importjava.util.logging.Logger;
- importcom.nbchina.tcp.msg.DisconnectMessage;
- importcom.nbchina.tcp.msg.Message;
- /**
- *守护的通信服务器,可以启动和关闭<br>
- *启动后,服务器运行一个守护线程负责接收终端更新请求,并分配给解析器解析编码提供通用的socket发送和接收功能
- *
- */
- publicclassServerextendsServerSocket{
- protectedstaticLoggerlogger=Logger.getLogger(Server.class.getName());
- static{
- logger.setLevel(Level.ALL);//查看所有跟踪信息
- }
- publicstaticfinalintPORT_SERVER=10000;
- publicstaticfinalintMSG_MAX_LENGTH=1024;
- privatestaticServerserver;
- publicstaticServernewInstant(){
- if(server==null){
- try{
- server=newServer();
- }catch(IOExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- }
- returnserver;
- }
- privateServer()throwsIOException{
- super(PORT_SERVER);
- }
- publicvoidstart(){
- try{
- while(true){
- Socketsocket=this.accept();
- logger.info("建立新会话");
- //newInstant(socket).start();InstantextendsThread修改为InstantimplementsRunnable
- newThread(newInstant(socket)).start();
- }
- }catch(Exceptione){
- logger.severe("服务器启动或接收数据失败:"+e.getMessage());
- }finally{
- try{
- logger.info("关闭服务器");
- super.close();
- }catch(IOExceptione){
- logger.severe("服务器关闭失败:"+e.getMessage());
- }
- }
- }
- /**
- *一个服务器实例,根据目前设计,一个终端的一次会话对应一个实例
- *单例模式,懒汉
- */
- publicstaticclassInstantimplementsRunnable{
- privateSocketsocket;
- publicInstant(Socketsocket){
- this.socket=socket;
- }
- publicSocketgetSocket(){
- returnsocket;
- }
- publicvoidrun(){
- logger.info("成功创建一个连接,等待客户端数据");
- Messagereponse;
- try{
- reponse=newReceiver(socket).process();
- logger.info("数据处理完成,发送响应");
- Sendersender=newSender(socket);
- if(reponse!=null){
- sender.send(reponse);
- }
- //总在最后发送关闭消息
- Messageclose=newDisconnectMessage();
- sender.send(close);
- logger.info("连接处理完成并关闭");
- }catch(Exceptione){
- InetAddressad=socket.getInetAddress();
- logger.warning("消息处理发生错误:"+e.getMessage()+"@"+ad.getCanonicalHostName());
- }finally{
- try{
- socket.close();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }
- }
- }
- publicstaticvoidmain(String[]args){
- logger.info("开始启动服务器");
- Server.newInstant().start();
- }
- }
- packagecom.nbchina.tcp.server;
- importjava.net.Socket;
- importjava.util.logging.Logger;
- importcom.nbchina.tcp.dao.StubDao;
- importcom.nbchina.tcp.msg.Message;
- importcom.nbchina.tcp.msg.ResponseMessage;
- importcom.nbchina.tcp.msg.UpdateMessage;
- /**
- *接收并解析编码
- *
- */
- publicclassReceiver{
- protectedstaticLoggerlogger=Logger.getLogger(Receiver.class.getName());
- privateSocketsocket;
- privateStubDaodao;
- publicReceiver(Socketsocket){
- this.socket=socket;
- this.dao=newStubDao();
- }
- publicMessageprocess()throwsException{
- UpdateMessagerequest=newUpdateMessage(socket.getInputStream());
- //判断是否是处理过的终端
- Stringid=request.getId();
- if(!dao.hasRegister(id)){
- //未处理过的,先注册(注册完以后,也应该查询是否有更新,可能是服务端已经录入了终端的注册信息)
- dao.register(id);
- }
- Messagereponse=null;
- if(dao.isUpdated(id)){
- //是处理过的,查询更新信息
- reponse=newResponseMessage(dao.fillMessageDetail(id));
- }
- returnreponse;
- }
- }
- packagecom.nbchina.tcp.server;
- importjava.io.DataOutputStream;
- importjava.net.Socket;
- importjava.util.logging.Logger;
- importcom.nbchina.tcp.msg.Message;
- /**
- *负责发送消息
- */
- publicclassSender{
- protectedstaticLoggerlogger=Logger.getLogger(Sender.class.getName());
- privateSocketsocket;
- publicSender(Socketsocket){
- this.socket=socket;
- }
- publicvoidsend(Messagemsg)throwsException{
- DataOutputStreamdos=newDataOutputStream(socket.getOutputStream());
- int[]data=msg.getData();
- for(intd:data){
- dos.write(d);
- }
- dos.flush();
- }
- }
- .....还有其他一些类
网络获取图片、html
- publicclassHtmlRequest{
- publicstaticvoidmain(String[]args)throwsException{
- URLurl=newURL("http://www.sohu.com/");
- HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
- conn.setRequestMethod("GET");
- conn.setConnectTimeout(5*1000);
- InputStreaminStream=conn.getInputStream();//通过输入流获取html数据
- byte[]data=readInputStream(inStream);//得到html的二进制数据
- Stringhtml=newString(data,"utf-8");
- System.out.println(html);
- /*FileimageFile=newFile("nbchina.htm");
- FileOutputStreamoutStream=newFileOutputStream(imageFile);
- outStream.write(data);
- outStream.close();*/
- }
- publicstaticbyte[]readInputStream(InputStreaminStream)throwsException{
- ByteArrayOutputStreamoutStream=newByteArrayOutputStream();
- byte[]buffer=newbyte[1024];
- intlen=0;
- while((len=inStream.read(buffer))!=-1){
- outStream.write(buffer,0,len);
- }
- inStream.close();
- returnoutStream.toByteArray();
- }
- }
- publicclassImageRequest{
- publicstaticvoidmain(String[]args)throwsException{
- URLurl=newURL("http://img04.taobaocdn.com/bao/uploaded/i4/T1hTSvXihAXXbeLMw1_041248.jpg_b.jpg");
- HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
- conn.setRequestMethod("GET");
- conn.setConnectTimeout(5*1000);
- InputStreaminStream=conn.getInputStream();//通过输入流获取图片数据
- byte[]data=readInputStream(inStream);//得到图片的二进制数据
- FileimageFile=newFile("nbchina.jpg");
- FileOutputStreamoutStream=newFileOutputStream(imageFile);
- outStream.write(data);
- outStream.close();
- }
- publicstaticbyte[]readInputStream(InputStreaminStream)throwsException{
- ByteArrayOutputStreamoutStream=newByteArrayOutputStream();
- byte[]buffer=newbyte[1024];
- intlen=0;
- while((len=inStream.read(buffer))!=-1){
- outStream.write(buffer,0,len);
- }
- inStream.close();
- returnoutStream.toByteArray();
- }
- }
多线程下载
- publicclassMulThreadDownload{
- publicstaticvoidmain(String[]args){
- Stringpath="http://dl_dir.qq.com/qqfile/qq/QQ2011/QQ2011.exe";
- try{
- newMulThreadDownload().download(path,5);
- }catch(Exceptione){
- e.printStackTrace();
- }
- }
- /**
- *从路径中获取文件名称
- *@parampath下载路径
- *@return
- */
- publicstaticStringgetFilename(Stringpath){
- returnpath.substring(path.lastIndexOf('/')+1);
- }
- /**
- *下载文件
- *@parampath下载路径
- *@paramthreadsize线程数
- */
- publicvoiddownload(Stringpath,intthreadsize)throwsException{
- URLurl=newURL(path);
- HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
- conn.setRequestMethod("GET");
- conn.setConnectTimeout(5*1000);
- intfilelength=conn.getContentLength();//获取要下载的文件的长度
- Stringfilename=getFilename(path);//从路径中获取文件名称
- FilesaveFile=newFile(filename);
- RandomAccessFileaccessFile=newRandomAccessFile(saveFile,"rwd");
- accessFile.setLength(filelength);//设置本地文件的长度和下载文件相同
- accessFile.close();
- //计算每条线程下载的数据长度
- intblock=filelength%threadsize==0?filelength/threadsize:filelength/threadsize+1;
- for(intthreadid=0;threadid<threadsize;threadid++){
- newDownloadThread(url,saveFile,block,threadid).start();
- }
- }
- privatefinalclassDownloadThreadextendsThread{
- privateURLurl;
- privateFilesaveFile;
- privateintblock;//每条线程下载的数据长度
- privateintthreadid;//线程id
- publicDownloadThread(URLurl,FilesaveFile,intblock,intthreadid){
- this.url=url;
- this.saveFile=saveFile;
- this.block=block;
- this.threadid=threadid;
- }
- @Override
- publicvoidrun(){
- //计算开始位置公式:线程id*每条线程下载的数据长度=?
- //计算结束位置公式:(线程id+1)*每条线程下载的数据长度-1=?
- intstartposition=threadid*block;
- intendposition=(threadid+1)*block-1;
- try{
- RandomAccessFileaccessFile=newRandomAccessFile(saveFile,"rwd");
- accessFile.seek(startposition);//设置从什么位置开始写入数据
- HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
- conn.setRequestMethod("GET");
- conn.setConnectTimeout(5*1000);
- conn.setRequestProperty("Range","bytes="+startposition+"-"+endposition);
- InputStreaminStream=conn.getInputStream();
- byte[]buffer=newbyte[1024];
- intlen=0;
- while((len=inStream.read(buffer))!=-1){
- accessFile.write(buffer,0,len);
- System.out.println("线程id:"+threadid+"下载["+len+"]");
- }
- inStream.close();
- accessFile.close();
- System.out.println("线程id:"+threadid+"下载完成");
- }catch(Exceptione){
- e.printStackTrace();
- }
- }
- }
- }
相关推荐
客户端和服务器有良好的移植性(附带源码和生成的EXE应用程序),可以实现不同电脑的通信
也就是说,它能使一台计算机上的数据无差错的发往网络上的其他计算机,所以当要传输大量数据时,我们选用TCP协议。 TCP协议的程序使用的是客户端/服务器模式,在Qt5中提供了QTcpSocket类来编写客户端程序,使用...
Linux网络编程示例程序,包含TCP、UDP的server和client
分别包含socket TCP 和UDP编程的实例,包括客户端和服务端。VS2015,测试通过
(1)基本网络编程实例 Winsock实现网络聊天室【\chap1\ChatRoom(Winsock)】 CSocket实现聊天室【\chap1\ChatRoom(Csocket)】 (2)本地计算机网络编程实例 获取计算机的名称和IP地址【\chap2\Local】 获取计算机的...
Linux下的基于TCP的网络编程实例,使用了多进程模式。代码较小,能快速掌握。
socket socket编程实例 TCP通信编程 通信 通信编程 文档和源代码齐全
基于tcp的socket编程实例,是由本人设计,说明可参见我的博客,谢谢大家支持。是初学网络编程的好资料。
Labview有关TCP编程的简单小实例,希望对代价有所帮助
用JAVA实现的TCP通信
针对Qt中的TCP网络开发进行详细解释,同时有经典实例供学习》
基于ATmeg单片机的TCP/IP协议的网络应用程序开发,具有很高的参考价值
含多个labview 的tcp编程实例,有点对点通信,交互式通信及一点对多点通信。
全面而详细地描述C++的TCP/IP编程和开发的基本概念和基本方法,并提供详细的代码实例。包含多个TCP/IP通信实例。值得下载。
C#网络编程TCP通信实例
VB.NET之TCP编程实例源码直接使用 VB.NET之TCP编程实例
在C#下用Socket编程其中用到的TCP来实现,当然还有UDP,将会出现在另一个例子里
这是一份关于TCP协议的Java编程实例的代码,有服务器端和客户端程序的代码,可以参考一下。
基于linux平台下,QT网络编程,tcp协议通讯详细例子,源码易懂,
C#套接字编程实例_UDP_TCP通信源码实例 本人收藏了3年的资源 现放出 都是总结了很多系统 软件项目实施过程中的经验的 慢慢积累的