2、TCP通用服务器(TCP服务端,接收客户端内容,然后输出)

TCP通用服务器(TCP服务端,接收客户端内容,然后输出)

网络层的IP可以唯一标识网络中的主机,而传输层的协议、端口这两个东西可以表示主机中的进程(也就是网络应用程序)。
在这里插入图片描述
套接字:
套接字概述:网络通信使用IP地址标识网络中的主机,使用端口号标识服务器上的进程。当两个程序需要通信时,它们可以通过使用Socket类建立套接字对象并连接在一起(端口号 + IP地址组合得出一个网络套接字)。

ServerSocket类

方法签名 方法说明
ServerSocket(int port) 创建绑定到指定端口的服务器套接字
ServerSocket(int port, int backlog) 创建服务器套接字并将其绑定到指定的本地端口号,并指定了积压。
Socket accept() 侦听要连接到此套接字并接受它
bind(SocketAddress endpoint) 将ServerSocket绑定到特定地址(IP地址和端口号)
InetAddress getInetAddress() 返回此服务器套接字的本地地址
void close() 关闭此套接字
int getLocalPort() 返回此套接字正在侦听的端口号

Socket类

方法签名 方法说明
Socket(InetAddress address, int port) 创建流套接字并将其连接到指定IP地址的指定端口号
Socket(String host, int port) 创建流套接字并将其连接到指定主机上的指定端口号
void bind(SocketAddress bindpoint) 将套接字绑定到本地地址
void connect(SocketAddress endpoint) 将此套接字连接到服务器
InetAddress getInetAddress() 返回套接字所连接的地址
InputStream getInputStream() 返回此套接字的输入流
OutputStream getOutputStream() 返回此套接字的输出流

TCP服务端:

ServerSocket对象与服务器端套接字:为了能使客户端成功地连接到服务器,服务器必须建立一个ServerSocket对象,该对象通过将客户端的套接字对象和服务器端的一个套接字对象连接起来,从而达到连接的目的。

ServerSocket的构造方法:ServerSocket(int port) throws IOException.
当建立了ServerSocket的对象后,就可以使用方法accept()将客户端的套接字和服务器的套接字连接起来。
ServerSocket server = new ServerSocket(8888);
Socket client = server.accept();

accept()方法返回一个和客户端Socket对象相连接的Socket对象sc,sc驻留在服务器端。sc调用getOutputStream()获得的输出流将指向客户端的输入流。同样,调用getInputStream()获得的输入流将指向客户端的输出流。
在这里插入图片描述
注意:从文件中读取数据时,所有的数据都已经在文件中了。而使用套接字连接时,可能在另一端数据发送之前,就已经开始读取了,这时,就会阻塞本线程,直到该读取方法成功读取到信息,本线程才继续执行后续的操作。accept()方法也会阻塞线程的执行,直到接收到客户的呼叫。

建立连接后,服务器端的套接字对象调用getInetAddress()方法获取客户端的IP地址和域名。客户端的套接字对象调用getInetAddress()方法获取服务器的IP地址和域名。通信完毕后,套接字应使用close()方法关闭套接字连接。

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class HttpServer{
   
    public static void main(String[] args) throws IOException {
   
        ServerSocket server = new ServerSocket(8888);
        System.out.println("服务器启动了....");
        boolean isShow=true;

        while (true){
   
            try {
   
                Socket client = server.accept();
                // getInetAddress()获取客户端的IP地址和域名
                // getLocalHost()获取本机的地址
                String clientName=client.getInetAddress().getLocalHost().toString();
                if(isShow){
   
                    System.out.println("客户端:"+clientName+"已连接到服务器");
                }
                isShow=false;

                BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
                String word = br.readLine();// word 客户端发送来的消息

                if(null != word){
   
                    System.out.println("客户端输入的是:"+word+",服务器响应的是:"+word);
                    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
                    bw.write(word+"\n");
                    bw.flush();
                }
            } catch (IOException e) {
   
                e.printStackTrace();
        
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值