-
Socket通信模型
查看全部 -
基于TCP协议的Socket通信:服务器端
//4.关闭资源
br/isr/is/socket/serverSocket.close();
查看全部 -
服务端:
1、创建ServerSocket对象,绑定监听端口
2、通过accept()方法监听客户端请求
3、连接建立后,通过输入流读取客户端发送的请求信息
4、通过输出流向客户端发送响应信息
5、关闭相关资源
客户端:
1、创建Socket对象,指明需要连接的服务器的地址和端口号
2、连接建立后,通过输出流向服务器端发送请求信息
3、通过输入流获取服务器相应的信息
4、关闭相关资源。查看全部 -
TCP协议是面向连接、可靠、有序的、以字节流的方式发送数据
基于TCP协议实现网络通信的类
客户端的Socket类
服务器端的ServerSocket类TCP的
Socket通信实现步骤
1,创建服务器端ServerSocket和客户端Socket
2,打开连接到Socket的输出和输入流
3,按照协议对Socket进行读写操作
4,关闭输入输出流,关闭Socket
Socket通信模型如图:
查看全部 -
1.URL(Uniform Resource Locator)统一资源定位符,表示Internet上某一资源的地址。 2.URL由两部分组成:协议名称和资源名称,中间用冒号隔开。 3.在java.net中提供了URL类来表示URL。 使用URL读取网页的内容 1.通过URL对象的openStream()方法可以得到指定资源的输入流。 2.通过输入流可以读取、访问网络上的数据。 ---------------------------------------- //创建一个URL实例 URL imooc=new URL("http://www.imooc.com"); //?后面表示参数,#后面表示锚点 URL url=new URL(imooc, "/index.html?username=tom#test"); //主要方法: //getProtocol();getHost();getPort();getPath();getFile();getRef();getQuery(); //读取网页内容 //通过URL的openStream方法获取URL对象所表示的资源的字节输入流 InputStream is = url.openStream()
查看全部 -
InetAddress类没有构造方法,不能直接new出一个对象
可以通过InetAddress类的静态方法获得InetAddress的对象; InetAddress.getLocalHost();
InetAddress.getByName("");//可以传入IP地址或主机名
类主要方法:
String - address.getHostName();
String - address.getHostAddress(); 主机名可以是机器名(如 "java.sun.com"),也可以是其 IP 地址的文本表示形式
查看全部 -
Socket编程 一、网络基础知识 两台计算机要通过网络进行通信,必须具备:a、唯一的标识(IP地址);
b、需要共同的语言(协议);
c、辨别不同应用程序(端口号)。
1、IP地址: 每台计算机的唯一标识,用来区分网络中的不同主机,是两台主机进行网络通信必不可少的。IPv4
2、协议: a、TCP/IP协议:目前世界上应用最为广泛的协议。是以TCP和IP为基础的不同层次上多个协议的集合。 也称为:TCP/IP协议族 或者 TCP/IP协议栈。
b、TCP: Transmission Control Protocol 传输控制协议
c、IP :Internet Protocol 互联网协议
d、TCP/IP模型(网络分层):
1、物理层;网线。。。
2、数据链路层
3、网络层
4、传输层:TCP/IP协议
5、应用层:HTTP超文本传输协议、FTP文件传输协议、SMTP简单邮件传送协议、Telnet远程登录服务。
3、端口号:
a、用于区分不同的应用程序;
b、端口号范围为0-65535,其中0-1023为系统所保留;
c、IP地址和端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础。
d、常用端口号-- http: 80; ftp; 21; telnet; 23。
JAVA中得网络支持
针对网络通信的不同层次,Java提供的网络功能有四大类:
1、InetAddress:用于标识网络上的硬件资源。(IP地址)
2、URL:统一资源定位符---通过URL可以直接读取或写入网络上得数据。
3、Sockets:使用TCP协议实现网络通信的Socket相关的类。
4、Datagram:使用UDP协议,将数据保存在数据报中,通过网络进行通信。
查看全部 -
基于TCP的Socket通信过程
查看全部 -
服务器端实现步骤
1.创建DatagramSocket,指定端口号
2.创建DatagramPacket
3.接受客户端发送的数据信息
4.读取数据
查看全部 -
客户端实现
1.定义发送信息
2.创建DatagramPacket,包含将要发送的信息
3.创建DatagramSocket
4.发送数据
查看全部 -
Socket通信模型
查看全部 -
UDP实现多线程通信
/*UDP服务器端*/ public class UDPServer { public static void main(String[] args) { try { //创建服务器端DatagramScoket,指定端口 DatagramSocket socket = new DatagramSocket(8800); DatagramPacket packet = null; byte[] data = null; //记录客户端的数量 int count = 0; System.out.println("服务器端已经启动,等待客户端发送数据"); while(true){ data = new byte[1024];// 创建字节数组,指定接受的数据报的大小 packet = new DatagramPacket(data, data.length); socket.receive(packet); UDPServerThread udpServerThread=new UDPServerThread(socket,packet); udpServerThread.start(); count++;//统计客户端的数量 System.out.println("客户端的数量:"+count); } } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
/*UDP服务器线程处理类*/ public class UDPServerThread extends Thread { // 和本线程相关的Socket DatagramSocket socket = null; DatagramPacket packet = null; public UDPServerThread(DatagramSocket socket,DatagramPacket packet) { this.socket = socket; this.packet = packet; } // 线程执行的操作,响应客户端的请求 public void run() { String info = null; InetAddress address = null; DatagramPacket packet2 = null; byte[] data2 = null; int port = 8800; try { //接收客户端发送的数据 // 读取数据 info = new String(packet.getData(), 0, packet.getLength()); System.out.println("我是服务器,客户端说:" + info); //向客户端响应数据 // 定义客户端的地址、端口号、数据 address = packet.getAddress(); port = packet.getPort(); data2 = "欢迎你!".getBytes(); // 创建数据报,包含响应的数据信息 packet2 = new DatagramPacket(data2, data2.length, address, port); // 响应客户端 socket.send(packet2); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { // 4.关闭资源 if (socket == null) socket.close(); } } }
/*UDP客户端*/ public class UDPClient { public static void main(String[] args) { try { //向服务器端发送数据 //1.定义服务器的地址、端口号、数据 InetAddress address = InetAddress.getByName("localhost"); int port = 8800; byte[] data = "用户名:admin;密码:123".getBytes(); //2.创建数据报,包含发送的数据信息 DatagramPacket packet=new DatagramPacket(data,data.length,address,port); //3.创建DatagramSocket对象 DatagramSocket socket = new DatagramSocket(); //4.向服务器端发送数据报 socket.send(packet); //接收服务器端响应的数据 //1.创建数据报,用于接收服务器端响应的数据 byte[] data2 = new byte[1024]; DatagramPacket packet2 = new DatagramPacket(data2, data2.length); //2.接收服务器响应的数据 socket.receive(packet2); //3.读取数据 String reply = new String(data2,0,packet2.getLength()); System.out.println("我是客户端,服务器端说:"+reply); //4.关闭资源 socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
查看全部 -
上传文件的业务分析
查看全部 -
如何实现发送文件?
客户端:
* 新建文件字节输入流
* 循环将输入流写入到发送的输出流中Socket socket=new Socket("localhost", 8881); OutputStream os=socket.getOutputStream(); File file=new File("e:/Table.java"); FileInputStream fs=new FileInputStream(file); byte[] data=new byte[1024*4]; int length; while((length=fs.read(data))!=-1){ os.write(data, 0, length); os.flush(); } socket.shutdownOutput(); socket.close(); os.close(); fs.close();
服务器端:
* 新建文件字节输出流
* 循环将接收到输入流写入到文件字符输出流ServerSocket server =new ServerSocket(8881); Socket socket=server.accept(); InputStream is=socket.getInputStream(); File file=new File("e:/153.java"); FileOutputStream fs=new FileOutputStream(file); byte[] data=new byte[1024*4]; int length; while((length=is.read(data))!=-1){ fs.write(data, 0, length); fs.flush(); } socket.shutdownInput(); server.close(); socket.close(); is.close(); fs.close();
查看全部 -
socket总结
查看全部
举报