JAVA网络编程(一)

一、概念

Sockets:

使用TCP协议实现的网络通信Socket相关的类

Datagram:

使用UD协议,将数据保存在用户数据报中,通过网络进行通讯。

Socket在应用层之下,传输层之上的接口层(操作系统提供给用户访问网络的系统接口)

Socket套接字:

网络上具有唯一标识的IP地址和端口组合一起才能构成唯一能识别的标识符套接字。

       Socket原理机制:

                         通信的两端都有Socket

                         网络通信其实就是Socket间的通信

                          数据在两个socket传送是通过IO流

 

二、TCP编程

 java中基于TCP协议实现网络通信的类

   客户端: Socket

   服务端:serverSocket

 

2-1:socket通信的步骤

  1. 创建serverSocket和Socket
  2. 打开连接到socket的输入和输出流
  3. 按照协议对socket进行读/写操作
  4. 关闭输入/输出流,关闭socket

2-1-1:服务器端

  1. 创建ServerSocket对象,继续监听端口
  2. 通过accept()方法监听客户端请求
  3. 连接建立后,通过输入流读取客户端发送的请求信息
  4. 通过输出流向客户端发送响应信息
  5. 关闭相关资源
  6. package com.demo.demo.demo2;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class TcpServer {
    	public static void main(String[] args) throws IOException {
    		//创建一个服务器端的socket,指定端口,并监听该端口
    		ServerSocket sc=new ServerSocket(80);
    		try {
    			//
    			Socket scc=sc.accept();
    		   InputStream in= scc.getInputStream();
    		   InputStreamReader inr=new InputStreamReader(in);
    		   BufferedReader br= new BufferedReader(inr);
    		   String info=null;
    		   while((info=br.readLine())!=null){
    			   System.out.println("客户端:"+info);
    		   }
    		   //socket关闭输入流
    		  scc.shutdownInput();
    		  OutputStream out=scc.getOutputStream();
    		  PrintWriter ww=new PrintWriter(out);
    		  ww.write("你好啊。客户端");
    		  ww.flush();
    		  scc.shutdownOutput();
    		  ww.close();
    		  out.close();
    		  br.close();
    		  inr.close();
    		  in.close();
    		  scc.close();
    		  sc.close();
    		  
    			
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}
    
    }
    

2-1-2客户端

  1. 创建socket对象,指明需要连接的服务器的地址和端口号
  2. 连接建立后。通过输出流向服务器端发送请求信息
  3. 通过输入流获得服务器相应的信息
  4. 关闭相关信息
package com.demo.demo.demo2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class TcpClient {
	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket sc=new Socket("localhost",80);
		OutputStream oo=sc.getOutputStream();
		PrintWriter pr=new PrintWriter(oo);
		pr.write("我是一号客户端");
		pr.flush();
		sc.shutdownOutput();
		InputStream is=sc.getInputStream();
		InputStreamReader re=new InputStreamReader(is);
		BufferedReader rrr=new BufferedReader(re);
		String info=null;
		while((info=rrr.readLine())!=null){
			System.out.println(info);
		}
		
		sc.shutdownInput();
		rrr.close();
		re.close();
		re.close();
		pr.close();
		oo.close();
		
	}

}

2-1-3:套接字超时(客户端)

             1. 可为套接字设置超时操作,即:当读写操作没有在规定时间内完成,则会抛出SocketTimeoutException异常

                           通过方法:  setSoTimeout(毫秒数)   设置

              2. new 出socket(String host,int port),这个socket会一直阻塞,直到建立起初始连接为止。

                           可先建立无连接的套接字,再使用一个超时来连接的方式解决问题。

         

//--------当socket没有建立起与主机的初始连接,会一直阻塞----------------
Socket s=new Socket("192.168.1.1","80")

//-----------------------解决方式---------------------10s---
Socket s=new Socket();
s.connect(new InetSocketAddress("192.168.1.1","80"),10000 );

2-1-4:关于因特网地址

package com.demo.demo.demo2;

import java.net.InetAddress;
import java.net.UnknownHostException;
public class InternetAdd {
	public static void main(String[] args) throws UnknownHostException {
		InetAddress[] an=InetAddress.getAllByName("www.baidu.com");
		
		for(InetAddress a :an){
			System.out.println(a);
		}
		
		
		
	}
}

2-1-5:应用多线程实现服务器与多客户端之间的通信

  1. 服务器端创建ServerSocket,循环调用accept()等待客户端连接
  2. 客户端创建一个socket并请求与服务器端连接。
  3. 服务器接受请求,创建socket与客户端建立专线连接
  4. 建立连接的两个socket在一个单独的线程上对话
  5. 服务器继续等待新的连接

三、UDP编程

UDP协议(用户数据报协议)是无连接的,不可靠的,无序的,速度的

         进行数据传输中,首先将要传输的数据定义为数据报,大小限制为64k,在数据报中指明数据所要达到的Socket(主机地址和端口号),然后再将数据报发送出去

         DatagramPacket类:表示数据报包

         DatagramSocket类 :进行端到端通信的类

 

3-1:服务器端实现步骤

         创建DatagramSocket,指定端口号

         创建DatagramSocket

         接收客户端发送的数据信息

         读取数据

3-2:客户端实现步骤

定义发送信息

创建DatagramPacket,包含将要发送的信息

创建DatagramSocket

发送数据

四、注意

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 【2】项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 【3】项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 【4】如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能,欢迎交流学习。 【注意】 项目下载解压后,项目名字和项目路径不要用中文,否则可能会出现解析不了的错误,建议解压重命名为英文名字后再运行!有问题私信沟通,祝顺利! 基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值