计算机网络传输

计算机网络是不同终端相互传输信息的途径,自顶向下分为七个层次:物理层(Physics Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表示层(Presentation Layer)、应用层(Application Layer),在计算机网络socket编程中,属于传输层。

计算机网络编程通过调用socket的API实现信息传输,而更底层的传输过程还有更详细的学科进行学习。本文旨在讲解基于Java的socket编程。

既然是消息的传输,信息的交换,就必须要有交流的对象,因此,第一个对象我们叫做服务器server,第二个叫做客户端client。

首先是客户端的程序编写,本次代码基于这个框架

import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class server {

    public static void main(String[] args) {
        try{


        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

然后就可以在try的语句中添加自己需要的内容

首先创建一个ServerSocket类,并制定port number,这是一个监听器listener线程,负责监听请求连接的客户端。注意,端口号码有一定的限制,一些特殊号码的是已被计算机中的其他程序所使用的。

            // open a server listener to listen to connection from client
            ServerSocket client_listener = new ServerSocket(18888);
            System.out.println("Listening, the IP address is: " + client_listener.getInetAddress());

当服务器server监听到客户端请求连接的申请后,就会建立一个socket连接

            // when a client apply to connecting, create and allocate a socket to the client
            Socket connection_socket =  client_listener.accept();
            System.out.println("Listened a connection");
            System.out.println("The client IP address is: "+ connection_socket.getInetAddress());
            System.out.println("The client Port number is: "+ connection_socket.getPort());

在完成连接的建立之后,服务器想要和客户端发送信息,就会生成一个管道来发送信息,即创建一个输出信息流的对象,并尝试发送信息。这里的flush是一个刷新和立即强制发送的作用。

            // create a channel to send message
            OutputStream message_send = connection_socket.getOutputStream();

            // when sending an integer, the number just in the range of (0, 255)
            int send_num1 = 123;
            message_send.write(send_num1);
            message_send.flush(); // optional, refresh and force to send message immediately
            System.out.println("Message sent successfully, content is: ");
            System.out.println(send_num1);

这时,我们最简单的服务器代码框架就基本完成了。

接下来就是一个客户端的代码框架,与服务器代码类似。

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

public class client1 {

    public static void main(String[] args) {
        try {

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

接下来就是申请连接,首先要知道服务器的host number和port number

            // create a new socket to connect server
            Socket client = new Socket("0.0.0.0", 18888);
            System.out.println("connecting..." );
            System.out.println("The client local port is: " + client.getLocalPort());
            System.out.println("Connected, start to communication");

在连接之后,要接收服务器发来的消息,创建一个接收消息的管道

            // create a channel to receive a message from server
            InputStream message_received = client.getInputStream();

并对消息进行读取

            // get an integer message from server
            int receive_int = message_received.read();
            System.out.println("Received a message from server, content:");
            System.out.println(receive_int);

这样,最简单的服务器代码框架也就完成了。

注意,在运行客户端代码之前,要先运行服务器代码启动监听,否则会报错;此外,socket和信息流的管道最后要用.close关闭。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值