黑马程序员-day24-网络编程(下)
2014-06-24 22:54
162 查看
-------
android培训、java培训、期待与您交流! ----------
TCP传输
1.Socket和ServerSocket
2.建立客户端和服务器端
3.建立连接后,通过Socket中的IO流进行数据的传输
4.关闭socket
同样,客户端与服务器端是两个独立的应用程序。
TCP传输实例:
基本思路(客户端)
1.客户端需要明确服务器的ip地址以及端口,这样才可以去试着建立连接,如果连接失败,会出现异常。
2.连接成功,说明客户端与服务端建立了通道,那么通过IO流就可以进行数据的传输,而Socket对象已经提供了输入流和输出流对象,通过getInputStream(),getOutputStream()获取即可。
3.与服务端通讯结束后,关闭Socket。
基本思路(服务端)
1.服务端需要明确它要处理的数据是从哪个端口进入的。
2.当有客户端访问时,要明确是哪个客户端,可通过accept()获取已连接的客户端对象,并通过该对象与客户端通过IO流进行数据传输。
3.当该客户端访问结束,关闭该客户端。
客户端
通过Socket建立对象并指定要连接的服务端主机以及端口。
Socket s = new Socket(“192.168.1.1”,9999);
OutputStream out = s.getOutputStream();
out.write(“hello”.getBytes());
s.close();
服务端
建立服务端需要监听一个端口
ServerSocket ss = new ServerSocket(9999);
Socket s = ss.accept ();
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int num = in.read(buf);
String str = new String(buf,0,num);
System.out.println(s.getInetAddress().toString()+”:”+str);
s.close();
ss.close();
Tcp传输最容易出现的问题
1.客户端连接上服务端,两端都在等待,没有任何数据传输。
通过例程分析:
2.因为read方法或者readLine方法是阻塞式。
3.解决办法:
自定义结束标记
使用shutdownInput,shutdownOutput方法。
自定义图形界面浏览器-Tomcat服务端
域名解析
android培训、java培训、期待与您交流! ----------
TCP传输
1.Socket和ServerSocket
2.建立客户端和服务器端
3.建立连接后,通过Socket中的IO流进行数据的传输
4.关闭socket
同样,客户端与服务器端是两个独立的应用程序。
TCP传输实例:
/* 演示tcp传输。 1.tcp分客户端和服务端。 2.客户端对应的对象是Socket。 服务端对应的对象是ServerSocket。 */ /* 客户端, 通过查阅socket对象,发现在该对象建立时,就可以去连接指定主机。 因为tcp是面向连接的。所以在建立socket服务时, 就要有服务端存在,并连接成功。形成通路后,在该通道进行数据的传输。 需求:给服务端发送给一个文本数据。 步骤: 1.创建Socket服务。并指定要连接的主机和端口。 */ import java.io.*; import java.net.*; class TcpClient{ public static void main(String[] args) throws Exception { //创建客户端的socket服务。指定目的主机和端口 Socket s = new Socket("192.168.1.254",10003); //为了发送数据,应该获取socket流中的输出流。 OutputStream out = s.getOutputStream(); out.write("tcp ge men lai le ".getBytes()); s.close(); } } /* 需求:定义端点接收数据并打印在控制台上。 服务端: 1.建立服务端的socket服务。ServerSocket(); 并监听一个端口。 2.获取连接过来的客户端对象。 通过ServerSokcet的 accept方法。没有连接就会等,所以这个方法阻塞式的。 3.客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。 并打印在控制台。 4.关闭服务端。(可选) */ class TcpServer{ public static void main(String[] args) throws Exception{ //建立服务端socket服务。并监听一个端口。 ServerSocket ss = new ServerSocket(10003); //通过accept方法获取连接过来的客户端对象。 while(true){ Socket s = ss.accept(); String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+".....connected"); //获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据。 InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); System.out.println(new String(buf,0,len)); s.close();//关闭客户端. } //ss.close(); } }
基本思路(客户端)
1.客户端需要明确服务器的ip地址以及端口,这样才可以去试着建立连接,如果连接失败,会出现异常。
2.连接成功,说明客户端与服务端建立了通道,那么通过IO流就可以进行数据的传输,而Socket对象已经提供了输入流和输出流对象,通过getInputStream(),getOutputStream()获取即可。
3.与服务端通讯结束后,关闭Socket。
基本思路(服务端)
1.服务端需要明确它要处理的数据是从哪个端口进入的。
2.当有客户端访问时,要明确是哪个客户端,可通过accept()获取已连接的客户端对象,并通过该对象与客户端通过IO流进行数据传输。
3.当该客户端访问结束,关闭该客户端。
客户端
通过Socket建立对象并指定要连接的服务端主机以及端口。
Socket s = new Socket(“192.168.1.1”,9999);
OutputStream out = s.getOutputStream();
out.write(“hello”.getBytes());
s.close();
服务端
建立服务端需要监听一个端口
ServerSocket ss = new ServerSocket(9999);
Socket s = ss.accept ();
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int num = in.read(buf);
String str = new String(buf,0,num);
System.out.println(s.getInetAddress().toString()+”:”+str);
s.close();
ss.close();
Tcp传输最容易出现的问题
1.客户端连接上服务端,两端都在等待,没有任何数据传输。
通过例程分析:
2.因为read方法或者readLine方法是阻塞式。
3.解决办法:
自定义结束标记
使用shutdownInput,shutdownOutput方法。
自定义图形界面浏览器-Tomcat服务端
import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; class MyIEByGUI{ private Frame f; private TextField tf; private Button but; private TextArea ta; private Dialog d; private Label lab; private Button okBut; MyIEByGUI(){ init(); } public void init(){ f = new Frame("my window"); f.setBounds(300,100,600,500); f.setLayout(new FlowLayout()); tf = new TextField(60); but = new Button("转到"); ta = new TextArea(25,70); d = new Dialog(f,"提示信息-self",true); d.setBounds(400,200,240,150); d.setLayout(new FlowLayout()); lab = new Label(); okBut = new Button("确定"); d.add(lab); d.add(okBut); f.add(tf); f.add(but); f.add(ta); myEvent(); f.setVisible(true); } private void myEvent(){ okBut.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ d.setVisible(false); } }); d.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ d.setVisible(false); } }); tf.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e){ try{ if(e.getKeyCode()==KeyEvent.VK_ENTER) showDir(); } catch (Exception ex){ } } }); but.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ try{ showDir(); }catch (Exception ex){ } } }); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } private void showDir()throws Exception{ ta.setText(""); String url = tf.getText();//http://192.168.1.254:8080/myweb/demo.html int index1 = url.indexOf("//")+2; int index2 = url.indexOf("/",index1); String str = url.substring(index1,index2); String[] arr = str.split(":"); String host = arr[0]; int port = Integer.parseInt(arr[1]); String path = url.substring(index2); //ta.setText(str+"...."+path); Socket s = new Socket(host,port); PrintWriter out = new PrintWriter(s.getOutputStream(),true); out.println("GET "+path+" HTTP/1.1"); out.println("Accept: */*"); out.println("Accept-Language: zh-cn"); out.println("Host: 192.168.1.254:11000"); out.println("Connection: closed"); out.println(); out.println(); BufferedReader bufr = new BufferedReader(new InputStreamReader(s.getInputStream())); String line = null; while((line=bufr.readLine())!=null){ ta.append(line+"\r\n"); } s.close(); } public static void main(String[] args) { new MyIEByGUI(); } }
域名解析
相关文章推荐
- 黑马程序员-Java-网络编程-day24
- 黑马程序员-Java网络编程学习总结
- 黑马程序员-java网络编程
- 黑马程序员-----网络编程学习日志
- 黑马程序员——网络编程
- 黑马程序员——Java网络编程
- 黑马程序员--网络编程的基础知识
- 黑马程序员_关于网络编程的学习
- 黑马程序员:网络编程
- 黑马程序员--网络通信UDP编程的总结及部分知识点查询
- 黑马程序员Java培训和Android培训_网络编程
- 【黑马程序员】网络编程
- 黑马程序员_网络编程
- 黑马程序员_Java 网络编程
- 黑马程序员 (6)JAVA网络编程部分
- 黑马程序员之网络编程
- 黑马程序员_网络编程
- 黑马程序员-网络编程
- 黑马程序员_网络编程
- 黑马程序员-java-网络编程