网络编程TCP协议--Java学习笔记

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44494648/article/details/99051088

网络编程TCP协议–Java学习笔记

在计算机中,通过IP协议,可以和将不同类型的计算机和操作系统连接,,他负责将消息,从一个主机,传到另一个主机,消息在传输过程中被分割成一个个小包,但不能解决在分组传输中可能出现的问题,TCP 协议是一种端对端的可靠的协议,TCP协议会在两台连接好的计算机之间一个信息传递通道,并负责收集信息包,按适当的顺序放好传输。
建立连接时,两端都要创建一个Socket并且必须要有一端,主动接受别人的连接,另一端去连接,当连接成功后,两个主机之间没有明确的服务端和客户端之分。
这种连接类似于打电话,必须有一方可以被呼叫,一方去呼叫,两边都接听了,链接就建立了,任意一方挂电话,连接就终止了。

1、 ServerSocket,创建一个可以接收Socket连接请求的类,

创建类
ServerSocket server01=new ServerSocket(9999);//9999是自己设置的端口
重要方法:
accept(),监听,如果收到一个连接请求,就返回一个Socket对象,否则就一直等待,阻塞式接收。
close() 用于关闭 ServerSocket

2、 使用Socket进行通信

1、 创建一个Socket连接
Socket client=new Socket(“localhost”,9999);//用于连接本机的端口为9999的Socket
2、 执行这行代码,就会和之前接收端建立联系通道。
3、 获取流:
Socket提供了输入流和输出流,都是字节流:getInputStream()/getOutputStream()
4、 使用相应的流操作完成通信;

3、 建立连接后,两端具有对等的地位,都可以与另一端接收和发送消息,这一点区别于UDP协议;

代码 :

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
//命名为LogServer是因为监听端在这个类中,这个Server区别于UDP协议中的服务端
public class LogServer {
    public static void main(String[] args) throws Exception {
        ServerSocket server=new ServerSocket(8888);
        Socket client=server.accept();
        System.out.println("一个客户端建立了连接");
        DataInputStream dis=new DataInputStream(client.getInputStream());
        String datas=dis.readUTF();
        String dataArrays[]=datas.split("&");
        String st1="",st2="";
        for(String tmp :dataArrays){
            String datainfor[]=tmp.split("=");
            if(datainfor[0].equals("uname")){
                System.out.println("用户名:"+datainfor[1]);
                st1=datainfor[1];
            }else if(datainfor[0].equals("pwd")){
                System.out.println("密码为:"+datainfor[1]);
                st2=datainfor[1];
            }
        }
        DataOutputStream dom=new DataOutputStream(client.getOutputStream());


        if(st1.equals("xiwuzr")&&st2.equals("123456789"))
        {
            dom.writeUTF("登录成功");
            dom.flush();
        }else{
            dom.writeUTF("登录失败");
            dom.flush();
        }
        dis.close();
        server.close();
    }
}
import java.io.*;
import java.net.Socket;

public class LogClient {
    public static void main(String[] args) throws Exception {


    Socket client=new Socket("localhost",8888);

    BufferedReader read=new BufferedReader(new InputStreamReader(System.in));
    System.out.println("请输入用户名:");
    String uname=read.readLine();
    System.out.println("请输入密码: ");
    String pwd=read.readLine();

    DataOutputStream dom=new DataOutputStream(client.getOutputStream());

    dom.writeUTF("uname="+uname+'&'+"pwd="+pwd);
    dom.flush();

    DataInputStream dis=new DataInputStream(client.getInputStream());
    String datas=dis.readUTF();
    System.out.println(datas);
    client.close();
    dom.close();
}

}


猜你喜欢

转载自blog.csdn.net/weixin_44494648/article/details/99051088