黑马程序员--TCP,UDP,URL。(很简单,都有固定的格式)

来源:互联网 发布:java继承作用 编辑:程序博客网 时间:2024/05/29 15:49

----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

upd传输。
在网络情况不好的时候不能保证数据的完好性。
优点是速度快。

import java.net.*;class UdpSend {public static void main(String[] args) throws Exception{//1,创建udp服务。通过DatagramSocket对象。DatagramSocket ds = new DatagramSocket(8888);//2,建立一个用来发送数据的包。byte[] data = "你好".getBytes();DatagramPacket dp = new DatagramPacket(data,data.length,InetAddress.getByName("121.35.160.251"),10000);//3,把这个包发出去。ds.send(dp);//4,关闭socket服务。ds.close();}}class UdpReceive{public static void main(String[] args) throws Exception{//1,建立一个socket服务。DatagramSocket ds = new DatagramSocket(10000);//2,创建一个包,用来接收数据。byte[] data = new byte[1024];DatagramPacket dp = new DatagramPacket(data,data.length);//3,等待数据。如果接收到数据,把数据存入包中。ds.receive(dp);//4,通过包拿数据。String adress = dp.getAddress().getHostName();String s = new String(dp.getData(),0,dp.getLength());System.out.println(adress+dp.getPort()+s);//5,关闭socket服务。ds.close();}}

Tcp连接
优点是数据稳定。

基本的步骤

import java.net.*;import java.io.*;class Client {public static void main(String[] args)throws Exception {//第一步:建立Socket服务。Socket s = new Socket("127.0.0.1",10003);//第二步:用Socket传输数据。OutputStream out = s.getOutputStream();out.write("你好呀".getBytes());//第三步:关闭Socket服务。s.close();}}class Server{public static void main(String[] args)throws Exception{//第一步:建立服务端的Socket服务。ServerSocket ss = new ServerSocket(10003);while (true){//第二步:调用accept方法。获取客户端Socket。Socket s = ss.accept();//第三步:用客户端Socket传输数据。String ip = s.getInetAddress().getHostAddress();System.out.println(ip);InputStream in = s.getInputStream();byte[] data = new byte[1024];int index=in.read(data);System.out.println(new String(data,0,index));//第四步:关闭客户端Socket服务。s.close();}//ss.close();//一般情况是不用关闭的。}}

Tcp练习:

从客户端传输图片到服务端。
然后服务端保存文件后返回客户端一句话。


思路:
1,定义一个客户端,
2,定义一个服务端。
3,开启服务端。
4,开户客户端。


注意:
这个例子是很经典的。多练习。

import java.net.*;import java.io.*;class Client {public static void main(String[] args) throws Exception{//定义一个Socket服务。Socket s = new Socket("127.0.0.1",10005);//用Socket服务传输数据。OutputStream out = s.getOutputStream();//发数据。File file = new File("f:\\io\\1.avi");BufferedInputStream bis =new BufferedInputStream(new FileInputStream(file));byte[] data = new byte[1024];int index = 0;while ((index=bis.read(data))!=-1){out.write(data,0,index);}s.shutdownOutput();//因为客户端还没有结束。所以发数据结束要定义一个标记。InputStream in = s.getInputStream();//收数据。BufferedReader br = new BufferedReader(new InputStreamReader(in));String line = null;while ((line=br.readLine())!=null){System.out.println(line);}//s.shutdownOutput();s.close(); //收完数据结束Socket服务。}}class Server {public static void main(String[] args) throws Exception{//建立服务端Socket服务ServerSocket ss = new ServerSocket(10005);while (true){//获取客户端Socket服务Socket s = ss.accept();//获取客户端IP。String address = s.getInetAddress().getHostAddress();System.out.println(address);InputStream in = s.getInputStream();//收数据File file = new File("f:\\io\\3.avi");BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));byte[] data = new byte[1024];int index = 0;while ((index=in.read(data))!=-1){bos.write(data,0,index);}bos.close();//收数据结束。PrintStream out = new PrintStream(s.getOutputStream(),true);//发数据。out.println("客户端你好,数据我已经保存。");s.close();//发完数据结束Socket服务。}}}

Tcp练习:
Tcp和多线程的结合应用。
多客户同时连接服务端,这个练习是文件传输的一个进一步练习。


思路:
1,定义客户端。
2,定义服务端。获取客户端,获取到了客户端,就建立一个线程。进行传输。
3,开启客户端。
4,开户服务端。

import java.net.*;import java.io.*;class Client {public static void main(String[] args) throws Exception{//定义一个Socket服务。Socket s = new Socket("127.0.0.1",10005);//用Socket服务传输数据。OutputStream out = s.getOutputStream();//发数据。File file = new File("f:\\io\\1.avi");BufferedInputStream bis =new BufferedInputStream(new FileInputStream(file));byte[] data = new byte[1024];int index = 0;while ((index=bis.read(data))!=-1){out.write(data,0,index);}s.shutdownOutput();//因为客户端还没有结束。所以发数据结束要定义一个标记。InputStream in = s.getInputStream();//收数据。BufferedReader br = new BufferedReader(new InputStreamReader(in));String line = null;while ((line=br.readLine())!=null){System.out.println(line);}//s.shutdownOutput();s.close(); //收完数据结束Socket服务。}}class Server {public static void main(String[] args) throws Exception{//建立一个服务端Socket。ServerSocket ss = new ServerSocket(10005);while (true){//循环获取客户端Socket。Socket s = ss.accept();//建立一个客户端的线程。new Thread(new ServerThread(s)).start();}}}class ServerThread implements Runnable{private Socket s;ServerThread(Socket s){this.s = s;}public void run(){try{String address = s.getInetAddress().getHostAddress();System.out.println(address);InputStream in = s.getInputStream();//收数据File file = new File("f:\\io\\3.avi");BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));byte[] data = new byte[1024];int index = 0;while ((index=in.read(data))!=-1){bos.write(data,0,index);}bos.close();//收数据结束。PrintStream out = new PrintStream(s.getOutputStream(),true);//发数据。out.println("客户端你好,数据我已经保存。");s.close();//发完数据结束Socket服务。}catch (Exception e){}}}

客户端通过键盘录入用户名。
服务端对这个用户名进行校验。


如果该用户存在,在服务端显示xxx,已登陆。
并在客户端显示 xxx,欢迎光临。

如果该用户存在,在服务端显示xxx,尝试登陆。
并在客户端显示 xxx,该用户不存在。

最多就登录三次。

思路:
1,定义客户端,获取键盘输入。传输到服务端。
2,获取服务端返回的数据。
3,判断服务端返回的数据,在客户端显示。
4,定义服务端,获取客户端Socket,获取数据。
5,给客户端传输数据。

这个程序有点复杂。。。


import java.io.*;import java.net.*;class LoginClient {public static void main(String[] args) throws Exception{//定义一个Socket服务。Socket s = new Socket("127.0.0.1",10007);//用Socket服务传输数据。PrintWriter pwOut = new PrintWriter(s.getOutputStream(),true);//发数据。for (int x=0; x<3; x++){BufferedReader br =new BufferedReader(new InputStreamReader(System.in));//从键盘录入数据。String data = br.readLine();pwOut.println(data);//把录入的数据发送出去。//s.shutdownOutput();//因为客户端还没有结束。所以发数据结束要定义一个标记。BufferedReader brIn = new BufferedReader(new InputStreamReader(s.getInputStream()));//收数据。String line = brIn.readLine();if ("用户不存在".equals(line)){System.out.println(data+"用户不存在");continue;}System.out.println(line);break;}s.close(); //收完数据结束Socket服务。}}class LoginServer {public static void main(String[] args) throws Exception{//建立一个服务端Socket。ServerSocket ss = new ServerSocket(10007);while (true){//循环获取客户端Socket。Socket s = ss.accept();//建立一个客户端的线程。new Thread(new ServerThread(s)).start();}}}class ServerThread implements Runnable{private Socket s;ServerThread(Socket s){this.s = s;}public void run(){try{//获取客户端IP。这个只用打印一次。String address = s.getInetAddress().getHostAddress();System.out.println(address);while (true){File file = new File("f:\\io\\login.txt");BufferedReader brIn = new BufferedReader(new InputStreamReader(s.getInputStream()));//收数据BufferedReader br = new BufferedReader(new FileReader(file));//读取数据库文件。PrintStream out = new PrintStream(s.getOutputStream(),true);//给客户端发数据。String lineIn = brIn.readLine();//读取客户发过来的数据。String line = null;while ((line=br.readLine())!=null)//循环比对数据。{if (lineIn.equals(line))//如果相同{out.println("你好,欢迎登录。");System.out.println(lineIn+"已经登录");br.close();s.close();return;}}//如果循环后都没有找到。out.println("用户不存在");System.out.println(lineIn+"尝试登录");br.close();//读数据库结束。s.close();//结束Socket服务。}}catch(Exception e){}}}

URL这个类要net包中。

 String getFile() 
          获取此 URL 的文件名。 
 String getHost() 
          获取此 URL 的主机名(如果适用)。 
 String getPath() 
          获取此 URL 的路径部分。 
 int getPort() 
          获取此 URL 的端口号。 
 String getProtocol() 
          获取此 URL 的协议名称。 
 String getQuery() 
          获取此 URL 的查询部 

import java.net.*;class URLDemo {public static void main(String[] args) throws MalformedURLException{URL url = new URL("http://192.168.1.254/myweb/demo.html?name=haha&age=30");System.out.println("getProtocol() :"+url.getProtocol());System.out.println("getHost() :"+url.getHost());System.out.println("getPort() :"+url.getPort());System.out.println("getPath() :"+url.getPath());System.out.println("getFile() :"+url.getFile());System.out.println("getQuery() :"+url.getQuery());/*int port = getPort();if(port==-1)port = 80;getPort()==-1*/}}


----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

0 0
原创粉丝点击