java笔记—网络通信socket的例子

Java Socket应用 网络通信 【 socket 】

第一节:网络基础知识
第二节:InetAddress 类:
             此类表示互联网协议 (IP) 地址。 

             InetAddress 的实例包含 IP 地址,还可能包含相应的主机名(取决于它是否用主机名构造或者是否已执行反向主机名解析)。


例子:

package inetaddreaa;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class InetAddressDom {

	public static void main(String[] args) {
		
		try {
			//根据本机 InetAddreaa 获取信息
			InetAddress address = InetAddress.getLocalHost();
			System.out.println("本机名字:" + address.getHostName());
			System.out.println("IP地址:" + address.getHostAddress());
			System.out.println("对象的原始 IP地址:"+address.getAddress());
			//看API文档
			
		} catch (UnknownHostException e) {		
			e.printStackTrace();
		}
	}

}


第三节:URL常用使用方法:
             理解:URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。基本URL包含模式(或称协议)、服务器名称(或IP地址)、路径和文件名。 
             协议为: http (超文本传输协议)。
             资源:www.imooc.com

             端口:8080

例子:

package url;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class URLDom {
	public static void main(String[] args) {

		try {
			//实例化URL			
			URL url= new URL("http://www.baidu.com");
			//输入流
			InputStream is = url.openStream();
			//将输入流转换为字符流
			InputStreamReader isr = new InputStreamReader(is,"utf-8");
			//为字符流添加缓冲流
			BufferedReader br = new BufferedReader(isr);
			//读取数据
			String date = br.readLine();
			//输出 行
			while( date != null ){
				System.out.println(date);
				date=br.readLine();
			}
			//关闭资源
			br.close();
			isr.close();
			is.close();

		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}


第四节:TCP 编程 【 传输控制协议 】
   概念:传输层,以字节流的方式发送数据。
             是一种面向连接的、可靠的、基于字节流的传输层通信协议。
服务器端【ServerSocket】
   1.创建服务器端,并制定绑定端口。     
   2.调用 accept() 方法调用 accept() 方法侦听并接受的连接。   
   3.获取输入流,并读取客户端信息。   
   4.获取输出流,向客户端端发送信息 。
   5.先关闭输入流,关闭资源。
客户端【Socket】
    1.创建客户端,制定服务器地址和端口 。     
    2.获取输出流,向服务器端发送信息 。  
    3.获取输入流,并读取服务器信息。    
    4.先关闭输出流,流关闭资源。    
TCP 编程之多线程连接:
     基本步骤:
          1.服务器端创建ServerSocket,循环调用accept() 等待客户端连接。
          2.客户端很粗昂贱一个socket并请求和服务器端连接。
          3.服务器端接受客户端的请求,创建socket与客户端建立专线连接。
          4.建立连接的两个socket在一个单独的线程上对话。

          5.服务器端需继续等待新的连接。

例子:


1、服务器端

package tcp;

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 Server {

	public static void main(String[] args) {
		
		try {
			//1创建服务器,并制定绑定端口
			ServerSocket ss = new ServerSocket(8080);
			//2调用accept()方法侦听并接受的连接。
			System.out.println("***服务器已经启动,等待客户端连接***");
			Socket sk = ss.accept();
			//3获取输入流,获取客户端信息
		    InputStream is = sk.getInputStream();
		    //转换字符流
		    InputStreamReader isr = new InputStreamReader(is);
		    //4为输入流添加缓冲
		    BufferedReader br = new BufferedReader(isr);
		    //输出
		    String io=null;
		    //5获取客户端信息
		    while( (io=br.readLine()) != null){
		    	System.out.println("我是服务器,然后客户端说:" + io);
		    	io=br.readLine();
		    }
		    //关闭输入流
		    sk.shutdownInput();
		    
		    
		    //获取输出流,向客户端发送信息
		    OutputStream ops= sk.getOutputStream();
		    //打印流
		    PrintWriter pw = new PrintWriter(ops);
		    pw.write("您好!欢迎您!");
		    //清空缓冲区数据
		    pw.flush();	
		    
		    //关闭资源
		    ops.close();
		    pw.close();
		    br.close();
		    isr.close();
		    is.close();
		    sk.close();
		    ss.close();
					
		} catch (IOException e) {			
			e.printStackTrace();
		}

	}

}
2、客户端

package tcp;

import java.io.*;
import java.net.*;

//还有一种就是和多线程结合在一起 

public class ServerConter {

	public static void main(String[] args) {
		
		try {
			//创建客户端Socket,指定服务器端口,地址
			Socket sr = new Socket("localhost",8080);
			//获取输出流,向服务器发送信息
		    OutputStream ops = sr.getOutputStream();
			//打印流
		    PrintWriter pw = new PrintWriter(ops);
		    //字符输出流
		    pw.write("用户名:陈郑游;密码:123");		  
		    //清空缓冲区数据
		    pw.flush();
		    //关闭输出流
		    sr.shutdownOutput();
		    
		    //获取输入流,读取服务器的信息
		    InputStream ips = sr.getInputStream();
		    //InputStreamReader isr = new InputStreamReader(ips);
		    BufferedReader buf = new BufferedReader(new InputStreamReader(ips));		    
		    String io=null;
		    //获取客户端信息
		    while( (io=buf.readLine()) != null){
		    	System.out.println("我是客户端,然后服务器说:" + io);
		    	io=buf.readLine();
		    }
		    //关闭资源
		    ips.close();
		    buf.close();
		    pw.close();
		    ops.close();
		    sr.close();
			
		} catch (UnknownHostException e) {			
			e.printStackTrace();
		} catch (IOException e) {		
			e.printStackTrace();
		}

	}

}


第五节:UDP 编程
   理解:UDP协议是无连接,不可靠,无序的。
             DategramPacket:数据包
             DataGrmSocket:进行通信到端口的通信的类
实现步骤:
     服务器端:
         1,创建DatagramSocket,指定端口号。
         2,创建DatagramPacket。
         3,接受客户端发送的数据信息。
         4,读取客户端数据。
         5,关闭资源。
     客户端:
         1,定义服务器的地址,端口号,数据,发送信息。
         2,创建DatagramPacket,包含将要发送的信息。
         3,创建DatagramSocket。
         4,向服务器端发送数据。
         5,关闭资源。

例子:

1、服务器端

package udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class Server {
    public static void main(String args[]){
    	
    	try {
    		/*接收客户端响应*/   		
    		//1,创建DatagramSocket,指定端口号。
			DatagramSocket socket = new DatagramSocket(8888);
			//2,创建DatagramPacket。
			byte date[] = new byte[1020];
			DatagramPacket packet = new DatagramPacket(date, date.length);
			System.out.println("***服务器已经启动,等待客户端连接***");
			//3,接受客户端发送的数据信息。		
			socket.receive(packet); //接收之前一直堵塞
			//4,读取数据。
			String info = new String(date, 0, packet.getLength());
			System.out.println("我是服务器,客户端说:" + info);
			//
			socket.close();
						
			/*向客户端发送响应*/			
			//1,定义客户端的地址,端口号,数据,发送信息。
			InetAddress iass = packet.getAddress();
			//地址
			int port=8888;  
			byte date2[] ="服务器说:欢迎您!".getBytes();  //转换为字节数组
			//2,创建DatagramPacket,包含将要发送的信息。
			DatagramPacket packet1 = new DatagramPacket(date2, date2.length, iass, port);
			//3,创建DatagramSocket。
			DatagramSocket soc = new DatagramSocket();
			//4,向客户端端发送数据。				
			soc.send(packet1);	
			
				
		} 
    	catch (SocketException e) {			
			e.printStackTrace();
		}
    	catch (IOException e) {				
			e.printStackTrace();
		}		
    }

	
}

2、客户端

package udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class Socket {

	public static void main(String[] args) {
		
		try {
			/*向服务器端发送响应*/			
			//1,定义服务器的地址,端口号,数据,
			InetAddress inet =InetAddress.getByName("localhost");
			//地址
			int port=8888;  
			byte date1[] ="用户名:小游;密码:888".getBytes();  //转换为字节数组
			//2,创建DatagramPacket,包含将要发送的信息。
		    DatagramPacket packet = new DatagramPacket(date1, date1.length, inet, port);		   		    
		    //3,创建DatagramSocket。
			DatagramSocket socket = new DatagramSocket();
			//4,向服务器端发送数据。				
			socket.send(packet);
							      					
			/*接收服务器端的响应*/			
			byte date2[] = new byte[1020];
			//1,创建DatagramPacket。
			DatagramPacket packet2 = new DatagramPacket(date2, date2.length);
			//2,接受服务器端发送的数据信息。		
			socket.receive(packet2);
			//3,读取数据。
			String info2 = new String(date2, 0, packet2.getLength());
			System.out.println("我是客户端,服务器说:" + info2);
			//4,关闭资源
			socket.close();
			
		    } 
		catch (UnknownHostException e) {
			e.printStackTrace();
		}
		catch (SocketException e) {				
			e.printStackTrace();
		}
	    catch (IOException e) {				
			e.printStackTrace();
		}		  
	}

}



转载于:https://my.oschina.net/czyandy/blog/692284

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值