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();
- }
- }
- }
- }
相关推荐
总的来说,TCP网络编程实例为开发者提供了一个实用的学习资源,涵盖了TCP连接的完整生命周期,以及在不同计算机间实现通信的关键技术。通过深入研究和实践,你将能够熟练掌握TCP编程,为构建可靠的网络应用打下坚实...
《C#网络编程实例教程源代码》是一份深入浅出的教学资源,旨在帮助开发者掌握C#语言在网络编程领域的应用。这份教程结合了理论与实践,提供了丰富的源代码示例,让学习者能够通过实际操作来理解和掌握网络编程的核心...
本压缩包文件聚焦于Linux环境下的网络编程,主要涉及TCP(传输控制协议)和UDP(用户数据报协议)这两种常见的网络通信协议。以下是基于提供的信息,对Linux网络编程中的TCP和UDP知识点的详细阐述: 1. **Linux ...
总结来说,"单片机TCP网络编程的实例"涉及了嵌入式系统与网络的融合,包括TCP/IP协议的理解、硬件接口的选择、协议栈的集成以及实际的数据传输。通过学习和实践,开发者可以构建出能够联网的智能设备,实现远程控制...
C++ 网络编程实例 本文档提供了 C++ 网络编程的基础知识,涵盖了网络编程的概述、OSI 七层网络模型、TCP/IP 协议和 C/S 编程模型等内容。 网络编程概述 网络编程是指用户使用 MFC 类库在 VC 编译器中编写程序,以...
本书《Java网络编程实例:Java网络编程实例》显然聚焦于通过实际案例来教授这一核心技能。以下是一些主要的知识点,这些知识点通常会在书中详细讨论: 1. **TCP/IP协议基础**:首先,了解TCP/IP模型和协议栈是非常...
在这个"socket TCP UDP编程实例"中,我们将会探讨如何在Windows环境下,利用Visual Studio 2015进行客户端和服务端的开发。 首先,TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的...
本实例主要探讨如何在C#环境中利用Socket类进行TCP网络编程。 首先,我们需要理解C#中的Socket类。Socket是.NET Framework提供的一个基类,它封装了底层网络通信协议,如TCP或UDP,允许开发者发送和接收数据。创建...
本资源是一个网络编程的实践宝库,包含了18个精心设计的实例,每个实例都附带了完整的源代码,非常适合学习和参考。这些实例是使用经典的Visual C++ 6.0开发的,尽管这个版本相对较老,但它仍然是许多开发者理解和...
在LabVIEW中进行TCP编程,我们需要使用到“网络”函数库中的相关VI(Virtual Instruments)。这些VI包括“打开TCP客户端连接”、“打开TCP服务器连接”、“发送TCP数据”、“接收TCP数据”等。以下是一些关键步骤的...
(1)基本网络编程实例 Winsock实现网络聊天室【\chap1\ChatRoom(Winsock)】 CSocket实现聊天室【\chap1\ChatRoom(Csocket)】 (2)本地计算机网络编程实例 获取计算机的名称和IP地址【\chap2\Local】 获取计算机的...
Java网络编程是构建分布式应用程序的关键技术之一,尤其是在服务器...通过上述的Java TCP通信实例,我们可以了解到Java网络编程的基本原理和操作步骤,这对于理解网络通信机制以及开发网络应用程序具有重要的指导意义。
**MFC网络编程实例** MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,用于构建Windows应用程序。在MFC中进行网络编程,主要是通过封装Winsock API实现的,这使得开发者能够更容易地创建支持网络通信...
Linux下的基于TCP的网络编程实例,使用了多进程模式。代码较小,能快速掌握。
这个"java网络编程实例2"很可能包含了深入的实践案例,帮助读者理解并掌握网络编程的基本概念和技术。以下是根据标题和描述可能涵盖的一些关键知识点: 1. **网络基础知识**:在Java中进行网络编程首先需要了解TCP/...
本项目“c++网络编程实例开发”提供了一系列基于C++的网络编程实例,涵盖了事件处理、线程管理和连接处理等核心概念。 首先,我们要理解网络编程的基本原理。网络编程是让计算机通过网络进行通信的过程,它涉及到...
本主题聚焦于“TCP/IP编程实例,WinSock编程,聊天实例”,将深入探讨这些关键概念和技术。 TCP/IP协议栈是互联网的基础,它定义了一套标准的数据传输规则,使得不同设备之间能够进行有效的通信。TCP(Transmission...
Java网络编程是Java开发中的重要领域,它涵盖了网络应用...提供的《Java网络编程实例》将可能包含这些概念的具体代码示例,帮助读者更好地理解和掌握相关技术。阅读和分析这些实例,是提升Java网络编程技能的有效途径。
《SQL网络编程实例》这份教程,正如其名,主要探讨的是如何在分布式环境中利用SQL进行数据交互和处理。SQL(Structured Query Language),即结构化查询语言,是用于管理和操作数据库的标准语言,尤其在网络编程中起...
在这个"基于TCP的socket编程实例"中,我们将深入探讨如何使用socket API进行TCP通信,并通过"main"这个程序文件来理解其实现过程。 首先,TCP socket编程主要包括服务器端和客户端两部分。服务器端需要先启动,监听...