Socket编程基本概念----imooc(1)
来源:互联网 发布:时序数据库 编辑:程序博客网 时间:2024/05/16 05:43
这俩天在学多线程,http相关的知识,感觉慕课网不错,听听记记
Socket编程
@(JAVA)
Socket编程基本概念—-imooc(1)
Socket编程基本概念—-imooc(2)
Socket编程基本概念—-imooc(3)
http://www.imooc.com/learn/161
- Socket编程
- 课程简介
- 网络基础知识
- InetAddress
- java中的URL应用
- socket简介
- 编程实现基于TCP的Socket通信实现用户登录
课程简介
- 网络基础知识
- InetAddress类
- URL
- TCP编程
- UDP编程
网络基础知识
俩台计算机通过网络进行通信的3个必备条件
- IP地址 (电脑的名字,唯一的)(比如:手机号码)
- 协议 (沟通的语言)
- 端口 (一台电脑运行不同应用的标识,区分不同应用程序)(比如:http:80 ftp:20 telnet:23)
TCP/IP协议
- 是目前世界上应用最广泛的协议
- 是以TCP和IP为基础的不同层次上多个协议的集合
- TCP : Transmission Control Protocol 传输控制协议
- IP:Internet Protocol 互联网协议
TCP/IP模型
- 1层物理层 :网线,网卡
- 4层传输层 (TCP IP)
- 5层应用层 (HTTP (超文本传输协议)FTP(文件传输协议)SMTP(简单邮件传送协议)Telnet(远程登录服务))
socket
- IP地址和端口号组成了socket
- socket是网络上运行的程序之间双向通信链路的终结点,是TCP 和 UDP的基础
java 中的网络支持
- InetAddress : 用于标识网络上的硬件资源
- URL:统一资源定位符 通过URL可以直接读取与写入网络上的数据
- Scorck:使用TCP协议实现网络通信的Socket相关的类
- Dategram:使用UDP协议,将数据保存在数据报中,通过网络进行通信
InetAddress
- 没有构造函数
- 实例:
import java.net.InetAddress;import java.net.UnknownHostException;/** * Created by zhangzexiang on 2016/9/15. */public class InetAddressTest { public static void main(String[] args) throws UnknownHostException { InetAddress address = InetAddress.getLocalHost(); System.out.println("computer name: "+address.getHostName()); System.out.println("computer ip: "+address.getHostAddress()); }}
output:
computer name: idea-PCcomputer ip: 169.254.195.114Process finished with exit code 0
java中的URL应用
- URL(Uniform Resource Locator) 统一资源定位符,表示Internet上某一资源的地址
- URL由俩部分组成:协议名称和资源名称,中间用冒号隔开
- java.net包中,提供了URL类来表示URL
- URL实例1
package imooc.socket;import java.net.MalformedURLException;import java.net.URL;/** * Created by zhangzexiang on 2016/9/15. */public class URLTest { public static void main(String[] args) throws MalformedURLException { //create a URL example URL imooc = new URL("http://www.imooc.com"); URL url = new URL(imooc, "/index.html?username=tom#test"); //?后面表示参数,#后面表示瞄点 System.out.println("协议:"+url.getProtocol()); System.out.println("主机:"+url.getHost()); //如果未指定端口号,则使用默认的端口号,此时getPork()方法返回值为-1 System.out.println("端口:"+url.getPort()); System.out.println("文件路径:"+url.getPath()); System.out.println("文件名:"+url.getFile()); System.out.println("相对路径:"+url.getRef()); System.out.println("查询字符串:"+url.getQuery()); }}
output:
协议:http主机:www.imooc.com端口:-1文件路径:/index.html文件名:/index.html?username=tom相对路径:test查询字符串:username=tom
- 使用URL读取网页内容
- 通过URL对象中的 openStream()方法可以得到指定资源的输入流
- 通过输入流可以读取 访问网络上的数据
package imooc.socket;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.MalformedURLException;import java.net.URL;/** * Created by zhangzexiang on 2016/9/15. * * URL读取网页内容 */public class URLTest2 { public static void main(String[] args){ try { //create URL ex URL url = new URL("http://www.baidu.com"); //通过 URL 的 openStream 方法获取URL对象所表示的资源的字节输入流 InputStream is = url.openStream(); //将字节输入流转换为字符输入流 InputStreamReader isr = new InputStreamReader(is,"utf-8"); //为字符输入流添加缓冲(加快速度?) BufferedReader br = new BufferedReader(isr); String data = br.readLine();//读取数据 while(data!=null){//循环读取数据 System.out.println(data);//输出数据 data = br.readLine(); } br.close();//close BufferedReader isr.close(); // close InputStreamReader 关闭字符输入流 is.close(); //close InputStream 关闭字节输入流 } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
output:
输出内容为baidu.com的.html文件内容
socket简介
TCP协议是面向连接、可靠的、有序的、以字节流的方式发送数据
- Socket通信实现步骤
- 创建ServerSocket和Socket
- 打开连接到Socket的输入/输出流
- 按照协议对Socket进行读/写操作
- 关闭输入输出流、关闭Socket
编程实现基于TCP的Socket通信,实现用户登录
- 服务器端:
- 创建ServerSocket对象,绑定监听端口
- 通过accept()方法监听客户端请求
- 连接建立后,通过输入流读取客户端发送的请求
- 通过输出流向客户端发送响应信息
- 关闭相关资源
- 客户端:
- 创建Socket对象,指明需要连接的服务器的地址和端口号
- 连接建立后,通过输出流向服务器端发送请求信息
- 通过输入流获取服务器相应的信息
- 关闭相关资源
package imooc.socket;import java.io.*;import java.net.ServerSocket;import java.net.Socket;/** * Created by zhangzexiang on 2016/9/17. * * 编程实现基于TCP的Socket通信,实现用户登录 * * 服务器端 */public class Server { public static void main(String[] args){ try { //1 创建一个服务器段的Socket,即ServerSocket,指定绑定的端口,并监听此端口 ServerSocket serverSocket = new ServerSocket(8888); //2 调用accept()方法开始监听,等待客户端的连接 System.out.println("***server is beginning,wait client ***"); Socket socket = serverSocket.accept(); //3 获取输入流,并读取客户端信息 InputStream is = socket.getInputStream();//字节输入流 InputStreamReader isr = new InputStreamReader(is);//将字节流转换为字符流 BufferedReader br = new BufferedReader(isr);//为输入流添加缓冲 String info = null; while((info=br.readLine())!=null){//循环读取客户端的信息 System.out.println("我是服务器,客户端说:"+info); } socket.shutdownInput();//关闭输入流 //4 获取输出流,响应客户端的请求 OutputStream os = socket.getOutputStream(); PrintWriter pw = new PrintWriter(os); //包装为打印流 pw.write("welcome!"); pw.flush();//调用flush()方法将缓冲输出 //5 关闭资源 pw.close(); os.close(); br.close(); isr.close(); is.close(); socket.close(); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } }}
package imooc.socket;import java.io.*;import java.net.Socket;/** * Created by zhangzexiang on 2016/9/17. * * * 编程实现基于TCP的Socket通信,实现用户登录 * * 客户端 */public class Client { public static void main(String[] args) { try { //1 创建客户端Socket,指定服务器地址和端口 Socket socket = new Socket("localhost",8888); //2 换取输出流,向服务器端发送信息 OutputStream os = socket.getOutputStream();//字节输出流 PrintWriter pw = new PrintWriter(os); //将输出流包装为打印流 pw.write("username:admin;password:123"); pw.flush(); socket.shutdownOutput();//colse outputStream //3 获取输入流,并读取服务器端的相应消息 InputStream is =socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String info = null; while((info=br.readLine())!=null){//循环读取服务端的信息 System.out.println("我是客户端,服务器说:"+info); } //4 colse resource br.close(); is.close(); pw.close(); os.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } }}
output: (first run Server.java)
***server is beginning,wait client ***我是服务器,客户端说:username:admin;password:123
我是客户端,服务器说:welcome!
0 0
- Socket编程基本概念----imooc(1)
- Socket编程基本概念----imooc(2)
- Socket编程基本概念----imooc(3)
- socket网络编程(1)-socket基本概念
- socket编程--socket基本概念
- socket编程--socket基本概念
- 软件测试基本概念-IMOOC笔记
- imooc-1
- (1)网络编程的基本概念和简单的socket通信
- Beej网络socket编程指南——基本概念(2)
- php初学(1)--imooc笔记
- (socket-nio-netty学习-1)socket,NIO,AIO基本概念
- Java Socket编程(一) Socket编程原理及基本概念
- 网络编程 ——socket基本概念
- 初遇SOCKET套接字(socket基本概念)
- socket编程(1)
- Socket编程(1)
- Socket编程(1)
- Android基础控件——ListView实现时间轴效果
- java小知识点小结
- 2016Shenyang网络预选赛1007 / HDU5898 (数位dp)
- avascript实现页面跳转功能,参数怎么传递?
- 网页Cookie和Session的初步认识(Java)
- Socket编程基本概念----imooc(1)
- jquery怎么获取radio的值
- Josephus problem
- Android基础之Fragment Viewpager篇
- dddd
- ThreadLocal实现线程范围的共享变量
- spring security 返回具体登陆错误信息
- View的滑动
- 计网--OSI七层与TCP/IP五层网络架构详解