您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Java基础入门之网络编程教程

2024/12/31 10:10:34发布16次查看
tcp 网络编程
-- tcp 分为客户端和服务端
-- 客户端对应的对象是 socket
-- 服务端对应的对象是 serversocket
-- 如果客户端先启动,则出现 connection refused 异常  //refused 拒绝
客户端创建socket 对象时,就可以连接服务器,连接成功后,即形成通路,进行数据交换
import java.net.*;import java.io.*;        //tcp客户端class tclient{public static void main(string [] args) throws exception             {                 socket socket=new socket(127.0.0.1,9000);                //取得 socket 中的输出流outputstream out =socket.getoutputstream();                 out.write(这是客户端向主机输出的数据.getbytes());                //取得服务端发回的数据inputstream in=socket.getinputstream();byte [] buff=new byte[1024];int len =in.read(buff);                 string str=new string(buff,0,len);                 system.out.println(服务端返回的数是:+str);                                  out.close();                 in.close();                 socket.close();             }         }
//tcp服务端/* 1 创建serversocket ,指定要监听的端口          2 通过 serversocket 的 accept 方法 (它是阻塞模式的) 取得连接上来的客户端对象          3 与客户端连通后,就可以得到客户端对象,并使用客户端对象读取流来取得数据          4 如果有必要,释放资源*/import java.io.*;import java.net.*;class tserver         {public static void main(string [] args) throws exception             {                 serversocket serversocket=new serversocket(9000);  //指定监听的端口socket clientsocket=serversocket.accept();                //通过客户端的socket对象可以取得信息string clientip=clientsocket.getinetaddress().gethostaddress();int clientport=clientsocket.getport();                                  system.out.println(clientip+:+clientport +连接成功);                                  inputstream in= clientsocket.getinputstream();byte[] buff=new byte[1024];int len=in.read(buff);  //len 表示读了多少个字节   注意,这个read 是阻塞的                                 string msg=new string(buff,0,len);                                  system.out.println(msg);                //往回发送数据outputstream out=clientsocket.getoutputstream();                 out.write(小样的客户端,你竞敢骂人?,我也能.getbytes()); */                 out.close();                 in.close();                 serversocket.close();                 clientsocket.close();                      }         }
例子 从客户端向服务端发字母,变成大写后反回
/*客户端:             1 建立服务             2 获取键盘录入             3 将数入的数据发给服务端             4 接收服务端返回的大写字母             5 关闭资源             备注: 使用带缓冲的字符流进行操作 */import java.io.*;import java.net.*;class transclient         {public static void main(string [] args) throws exception             {                     socket socket=new socket(127.0.0.1,8000);                    //定义输入流,读取键盘数据bufferedreader br=new bufferedreader(new inputstreamreader(system.in));                    //定义输出流对象(用于将键盘数据写入到输出流中)bufferedwriter bw=new bufferedwriter(new outputstreamwriter(socket.getoutputstream()));                    //定义一个socket 读取流,读取服务器返回的大写字母bufferedreader brresult=new bufferedreader(new inputstreamreader(socket.getinputstream()));                                          string str=null;while((str=br.readline())!=null){ //从键盘开始读取bw.write(str);  //向服务端输出                        bw.newline();                         bw.flush(); //千万别忘了                                               system.out.println(服务端返回的数据是+brresult.readline()); //取出变大写后的字符串                    }                                          socket.close();                     br.close();                     bw.close();                     brresult.close();                     }         }
//服务端  import java.net.*;import java.io.*;class transserver         {public static void main(string [] args) throws exception                 {                      serversocket serversocket=new serversocket(8000);                      socket clientsocket=serversocket.accept();                                           //读取socket流中的数据(从客户端发过来的小写字母) bufferedreader br=new bufferedreader(new inputstreamreader( clientsocket.getinputstream()));                                           //创建输出流对象,往clientsocket 的流中写入转换后的大写字母 bufferedwriter bw=new bufferedwriter(new outputstreamwriter( clientsocket.getoutputstream()));                                            string str=null;                     while((str=br.readline())!=null)  //注意 readline 的特性,它是要一直读取回车换行才返回                     {                              bw.write(str.touppercase());                              bw.newline();                              bw.flush(); //千万别忘了                     }                                           br.close();                     bw.close();                     clientsocket.close();                     serversocket.close();                 }                  }
例子 上传文件
//客户端  import java.io.*;import java.net.*;class upclient         {public static void main(string [] args) throws exception             {                     socket socket=new socket(127.0.0.1,7000);                     bufferedreader br=new bufferedreader(new filereader(c:\\作业\\名单.txt));  //用来读文件的输入流bufferedwriter bw=new bufferedwriter(new outputstreamwriter(socket.getoutputstream()));  //用来把文件往服务端传                    //往scoket中一行一行的写入数据string content=null;while((content=br.readline())!=null){                         bw.write(content);                         bw.newline();                         bw.flush();                     }                                          socket.shutdownoutput(); //关闭客端的输出流同,当相于加入一个结束标记(-1),要不然服务端会不停的等                                //取出服务端返回的信息bufferedreader brresult=new bufferedreader(new inputstreamreader(socket.getinputstream())) ;                     system.out.println(    brresult.readline());                                              bw.close();                     br.close();                     socket.close();             }         }
//服务端  import java.io.*;import java.net.*;class upserver         {public static void main(string [] args) throws exception             {                     serversocket serversocket=new serversocket(7000);                     socket clientsocket=serversocket.accept();                                          system.out.println(clientsocket.getinetaddress().gethostaddress()+已经连接...); //打印一下客户端连上的的信息                    //读取客户端发过的来的数据bufferedreader br=new bufferedreader(new inputstreamreader(clientsocket.getinputstream()));                     bufferedwriter bw=new bufferedwriter(new filewriter(e:/xxx.exe));                                          string str=null;while((str=br.readline())!=null){  //如果客户端不发结束标记,它就不会返回                        bw.write(str);                         bw.newline();                         bw.flush();                     }                    //再向发送端返回一条提示息                                         bufferedwriter bwresult=new bufferedwriter(new outputstreamwriter(clientsocket.getoutputstream()));                     bwresult.write(文件上传成功);                     bwresult.flush();                                          serversocket.close();                     clientsocket.close();                     bwresult.close();                     bw.close();                     br.close();                                      }
例子 上传图片
客户端import java.net.*;import java.io.*;class imgclient             {public static void main(string [] ars) throws exception                     {                             socket socket=new socket(127.0.0.1,7000);                             fileinputstream fis=new fileinputstream(c:\\image\\0.jpg);  //文件输入流outputstream out=socket.getoutputstream();                            byte [] buff  =new byte[1024];int len=0;while((len=fis.read(buff))!=-1){  //一边读数据,一边传数据out.write(buff,0,len);    //字节流,不用flush, 和 newline()                            }                                                          socket.shutdownoutput(); //加一个结束标记,表示输入流结束                            //取出服务端发过来的信息bufferedreader brresult=new bufferedreader(new inputstreamreader(socket.getinputstream()));                             system.out.println(brresult.readline());                                                          socket.close();                             fis.close();                     }             }
服务端import java.net.*;import java.io.*;class imgserver             {public static void main(string [] args) throws exception                 {                         serversocket serversocket=new serversocket(7000);                                                  socket clientsocket=serversocket.accept();                                                  system.out.println(clientsocket.getinetaddress().gethostaddress()+ 已连接);                                                  inputstream in=clientsocket.getinputstream(); //取数据用的流fileoutputstream fos=new fileoutputstream(e:\\xxx.jpg);                        byte [] buff=new byte[1024];int len=0;while((len=in.read(buff))!=-1){                             fos.write(buff,0,len); //不用flush 因为是字节流                        }                                                  bufferedwriter br=new bufferedwriter(new outputstreamwriter(clientsocket.getoutputstream()));                         br.write(图片上传成功);                         br.flush(); //别忘了                                                 serversocket.close();                         clientsocket.close();                         br.close();                         fos.close();                     }             }
例子 多线程并发上传图片
服务端     import java.net.*;class picserver         {public static void main(string [] args) throws exception                  {                     serversocket serversocket=new serversocket(9000);                    while(true)                     {                             socket clientsocket=serversocket.accept();new thread(new picthread(clientsocket)).start();                     }                 }         }
import java.io.*;import java.net.*;class picthread implements runnable{private socket clientsocket;public picthread(socket socket)             {                 clientsocket=socket;             }public void run()             {try{                                          string clientip=clientsocket.getinetaddress().gethostaddress();                     fileoutputstream fos=new fileoutputstream(e:\\+clientip);                     inputstream in =clientsocket.getinputstream();  //从套接字中取出数据byte[] buff=new byte[1024];int len=0;while((len=in.read(buff))!=-1)  //把数据从流中读出,写入文件                    {                          fos.write(buff,0,len);                     }                                          bufferedwriter br=new bufferedwriter(new outputstreamwriter(clientsocket.getoutputstream()));                     br.write(图片上传成功);                     br.flush();                                                               clientsocket.close();                     fos.close();                     in.close();                                      }catch(exception ex){                     system.out.println(出错了);                 }                         }         }
客户端        import java.io.*;import java.net.*;class picclient{public static void main(string [] args) throws exception             {                                     string filename=args[0];//string filename=c:\\image\\2.jpg;                                     //进行验证file file=new file(filename);if(!(file.exists()&&file.isfile()))  //验证文件是不是存在                    {                         system.out.println(输入的文件名错误或是个目录);return;                     }                    if( !file.getname().endswith(.jpg)){                         system.out.println(文件类型不正确);return ;                     }                    if( file.length() >1024*1024){                         system.out.println(你想干啥,整这么大的文件上来? 不行);return;                      }                                        socket socket=new socket(127.0.0.1,9000);                                      fileinputstream fis=new fileinputstream(filename);  //构建文件输入流outputstream out=socket.getoutputstream(); //输出流byte [] buff=new byte[1024]; int len=0;while((len=fis.read(buff))!=-1)  //一边读入,一边往文件中写出                    {                          out.write(buff,0,len);                     }                                          socket.shutdownoutput();                    //取出服务端发过来的信息bufferedreader brresult=new bufferedreader(new inputstreamreader(socket.getinputstream()));                     system.out.println(brresult.readline());                                          socket.close();                     fis.close();                     brresult.close();                     out.close();                 }         }
以上就是java基础入门之网络编程教程的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product