javaの网络编程基础知识+Socket编程

OSI参考模型中数据封装过程
javaの网络编程基础知识+Socket编程_第1张图片

TCP/IP协议族分为四层

javaの网络编程基础知识+Socket编程_第2张图片

网络编程的目的:
**网络通信的要素**IP地址,端口号,传输协议

javaの网络编程基础知识+Socket编程_第3张图片

javaの网络编程基础知识+Socket编程_第4张图片

javaの网络编程基础知识+Socket编程_第5张图片

javaの网络编程基础知识+Socket编程_第6张图片

强调:客户端和服务端进行数据传输时,客户端的输入流对应服务端的输出流,客户端的输出流对应服务端的输入流。

基于TCP协议的Socket编程
例子:实现一个客户端和服务端的交换
服务端

package cn.com.jlu.tcpsocket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {

        //创建一个ServerSocket,调用含有一个参数的构造方法,自定义一个端口号
        ServerSocket serverSocket=new ServerSocket(8887);
        //调用ServerSocket的accept方法,获取客户端传过来的请求
        Socket socket=serverSocket.accept();
        //连接开始getInetAddress()获取socket连接地址;getHostAddress()返回 IP 地址字符串
        System.out.println(socket.getInetAddress().getHostAddress()+" has Connected!");

        //读取客户端传过来的内容,将字节流转换为字符流
        BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
        //将服务端的内容写回到客户端
        PrintWriter pw=new PrintWriter(socket.getOutputStream());

        String line=null;

        while((line=br.readLine())!=null )
        {
            if(line.equals("over"))
            {
                break;
            }


            System.out.println(line);
            //将客户端传来的内容大写,再传回去
            pw.println(line.toUpperCase());

        }

        //一次关闭资源
        pw.close();
        br.close();
        serverSocket.close();
        //输出断开连接
        System.out.println(socket.getInetAddress().getHostAddress()+" has Disconnected!");


    }

}

客户端基于TCP

package cn.com.jlu.tcpsocket;

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

public class TCPClient {

    /**
     * @param args
     * @throws IOException 
     * @throws UnknownHostException 
     */
    public static void main(String[] args) throws UnknownHostException, IOException {

        //1.创建一个Socket类,调用含有两个参数的构造方法IP和端口号(应用程序的逻辑地址)
        Socket socket=new Socket("127.0.0.1", 8887);
        //读取键盘输入的内容
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        //从socket中获取IO流

        //将键盘输入的内容写到服务端
        PrintWriter pw=new PrintWriter(socket.getOutputStream());

        //获取到服务端传来的内容
        BufferedReader reader=new  BufferedReader(new InputStreamReader(socket.getInputStream()));



        while(true)
        {
            //按行读取键盘输入的内容
            String line=br.readLine();
            pw.println(line);

            //如果键入over,则停止运行
            if(line.equals("over"))
            {
                break;
            }

            //将客户端传过来的内容按行读取
            System.out.println(reader.readLine());

        }
        //关闭资源
        pw.close();
        br.close();
        reader.close();

    }

}

你可能感兴趣的:(socket编程)