Java URL类的中的TCP

42 篇文章 0 订阅
26 篇文章 0 订阅

需要服务器端和客户端

这里是服务器端

package cn.sdut.net;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
//相当于打电话
//端口[0,65535]
//80\443\21\3306等端口号不能随便用
public class TCPServer {//服务器端

    public static void main(String[] args) {
        try {//抛异常
            ServerSocket ss = new ServerSocket(9998);//套接字,绑定服务器的端口,便于客户端的连接。
            while(true) {//while循环用于客户端输入的时候,所有的服务器都可以接收。
                Socket socket = ss.accept();//这句话的作用是,一旦建立连接就可以执行下面的语句。
                System.out.println("连接完成!");
                //客户端是用来接收(读取)数据的。
                //所以要建立输入流。
                InputStream is = socket.getInputStream();//获取输入流。用于读取数据。
                //剩余的和输入输出流是一样的。
                byte[] bytes = new byte[10];
                int len = 0;
                String str = null;
                while((len = is.read(bytes))!=-1) {
                    str = new String(bytes,0,len);
                    System.out.println(str);
                }
                System.out.println("服务器读取数据结束。。");
                //读取完之后回话。
                OutputStream os = socket.getOutputStream();//回话的话,需要的是输出流。
                os.write("Yes,thank you!".getBytes());//以字节数组的形式输出。
                socket.shutdownOutput();//输出结束的标志。
                //★注意不是这个socket.shutdownInput();
                System.out.println("服务器发送数据结束。。");
                //关闭,好的习惯。后开启是先关闭。
                is.close();
                os.close();
                socket.close();
                if(str.equals("end")) {
                    break;//结束的标志,表示客户端不再发送数据。
                }
                ss.close();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
}

这里是客户端

package cn.sdut.net;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class TCPClient {//客户端

    public static void main(String[] args) {
        try {
            Socket socket = new Socket(InetAddress.getLocalHost(), 9998);//获取的是服务器端的ip地址和端口号。
            //用于建立连接。服务器端有设置的固定端口。ServerSocket(9998);然后用客户端建立连接,接着用accept方法接受连接。
            System.out.println("建立连接");
            //建立连接之后就可以发送信息了。
            //用到输出流。
            OutputStream os = socket.getOutputStream();
            os.write("Hello!Server".getBytes());
            socket.shutdownOutput();//回话结束的标志。
            System.out.println("客户端发送数据结束");
            //然后是读取服务器端发送来的数据。
            InputStream is = socket.getInputStream();
            byte[] bytes = new byte[10];
            int len = 0;
            while((len = is.read(bytes))!=-1) {
                String str = new String(bytes,0,len);
                System.out.println(str);
            }
            System.out.println("客户端读取数据完毕");
            //好的习惯。
            os.close();
            is.close();
            socket.close();
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值