计算机网络技术与JAVA网络编程利用TCP建立服务端和客户端-----计算机网络经典

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

public class Test
{
    public static void main(String[] args)
    {
        //TCP协议进行通信的两个应用进程,客户端,服务端,使用TCP协议前,需要建立TCP链接,形成基于字节流的传输数据通道,传输前采用三次握手的方式,点对点通信,是可靠的
        //TCP协议采用重发机制,当一个通信实体发送信息到另一个时,需要双方确认,如果没确认成功,则会再次发送,在连接中可进行大数据量的传输,传输完毕需要释放已建立的链接,效率低
        //UDP协议进行通信的两个应用进程:发送端,接受端,将数据,源,目的封装成数据包,不需要建立链接,不管对方是否准备好,接收方不确认,不能保证数据的完整性,是不靠谱的,每个报文大小限制在64K内
        //发送结束时无需释放资源,开销小,通信效率高,适用音频视频,普通数据传输
        //TCP三次握手,客户端向服务端发起连接请求,发送SYN报文,发送序号为X,服务端发送SYN+ACK报文确认客户端的请求,发送序号为Y,确认序号为X+1,客户端发送ACK报文确认收到服务端请求,发送序号为Z,确认序号为Y+1
        //TCP四次挥手,客户端向服务器端发起结束链接,让服务器做好最后的准备工作,此时客户端半关闭,表示不再向服务器发送数据了,但是还可以接受数据,第二次挥手,服务器收到客户端的请求后,会将最后的数据发给客户端,告知上层不再接受数据
        //第三次挥手,服务器发完数据后释放连接报文发到客户端,第四次挥手,客户端收到释放连接报文,回复一个断开报文,服务器收到后彻底断开链接
        int port = 8989;
        Thread thread = new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                Socket socket = null;
                OutputStream outputStream = null;
                try
                {
                    InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
                    socket = new Socket(inetAddress,port);
                    outputStream = socket.getOutputStream();
                    System.out.println("客户端已启动");
                    outputStream.write("你好,请多多关照".getBytes());
                }
                catch (UnknownHostException e)
                {
                    throw new RuntimeException(e);
                }
                catch (IOException e)
                {
                    throw new RuntimeException(e);
                }
                finally
                {
                    try
                    {
                        if(socket != null)
                        {
                            socket.close();
                        }
                        if(outputStream != null)
                        {
                            outputStream.close();
                        }
                    }
                    catch (IOException e)
                    {
                        throw new RuntimeException(e);
                    }
                }
            }
        });
        ServerSocket serverSocket = null;
        Socket socket = null;
        InputStream inputStream = null;
        try
        {
            serverSocket = new ServerSocket(port);
            thread.start();
            socket = serverSocket.accept();
            System.out.println("访问者IP是" + socket.getInetAddress().getHostAddress());
            System.out.println("服务端已开启");
            inputStream = socket.getInputStream();
            byte[] bytes = new byte[10240];
            int len;
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            while((len = inputStream.read(bytes)) != -1)
            {
                //可能出现乱码
                String string = new String(bytes,0,len);
                System.out.println(string);
                //正确的
                byteArrayOutputStream.write(bytes,0,len);
            }
            System.out.println(byteArrayOutputStream.toString());
        }
        catch (IOException e)
        {
            throw new RuntimeException(e);
        }
        finally
        {
            try
            {
                if(serverSocket != null)
                {
                    serverSocket.close();
                }
                if(socket != null)
                {
                    socket.close();
                }
                if(inputStream != null)
                {
                    inputStream.close();
                }
            }
            catch (IOException e)
            {
                throw new RuntimeException(e);
            }
        }
    }
}

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

public class Test
{
public static void main(String[] args)
{
//TCP协议进行通信的两个应用进程,客户端,服务端,使用TCP协议前,需要建立TCP链接,形成基于字节流的传输数据通道,传输前采用三次握手的方式,点对点通信,是可靠的
//TCP协议采用重发机制,当一个通信实体发送信息到另一个时,需要双方确认,如果没确认成功,则会再次发送,在连接中可进行大数据量的传输,传输完毕需要释放已建立的链接,效率低
//UDP协议进行通信的两个应用进程:发送端,接受端,将数据,源,目的封装成数据包,不需要建立链接,不管对方是否准备好,接收方不确认,不能保证数据的完整性,是不靠谱的,每个报文大小限制在64K内
//发送结束时无需释放资源,开销小,通信效率高,适用音频视频,普通数据传输
//TCP三次握手,客户端向服务端发起连接请求,发送SYN报文,发送序号为X,服务端发送SYN+ACK报文确认客户端的请求,发送序号为Y,确认序号为X+1,客户端发送ACK报文确认收到服务端请求,发送序号为Z,确认序号为Y+1
//TCP四次挥手,客户端向服务器端发起结束链接,让服务器做好最后的准备工作,此时客户端半关闭,表示不再向服务器发送数据了,但是还可以接受数据,第二次挥手,服务器收到客户端的请求后,会将最后的数据发给客户端,告知上层不再接受数据
//第三次挥手,服务器发完数据后释放连接报文发到客户端,第四次挥手,客户端收到释放连接报文,回复一个断开报文,服务器收到后彻底断开链接
int port = 8989;
Thread thread = new Thread(new Runnable()
{
@Override
public void run()
{
Socket socket = null;
OutputStream outputStream = null;
try
{
InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
socket = new Socket(inetAddress,port);
outputStream = socket.getOutputStream();
System.out.println("客户端已启动");
outputStream.write("你好,请多多关照".getBytes());
}
catch (UnknownHostException e)
{
throw new RuntimeException(e);
}
catch (IOException e)
{
throw new RuntimeException(e);
}
finally
{
try
{
if(socket != null)
{
socket.close();
}
if(outputStream != null)
{
outputStream.close();
}
}
catch (IOException e)
{
throw new RuntimeException(e);
}
}
}
});
ServerSocket serverSocket = null;
Socket socket = null;
InputStream inputStream = null;
try
{
serverSocket = new ServerSocket(port);
thread.start();
socket = serverSocket.accept();
System.out.println("访问者IP是" + socket.getInetAddress().getHostAddress());
System.out.println("服务端已开启");
inputStream = socket.getInputStream();
byte[] bytes = new byte[10240];
int len;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
while((len = inputStream.read(bytes)) != -1)
{
//可能出现乱码
String string = new String(bytes,0,len);
System.out.println(string);
//正确的
byteArrayOutputStream.write(bytes,0,len);
}
System.out.println(byteArrayOutputStream.toString());
}
catch (IOException e)
{
throw new RuntimeException(e);
}
finally
{
try
{
if(serverSocket != null)
{
serverSocket.close();
}
if(socket != null)
{
socket.close();
}
if(inputStream != null)
{
inputStream.close();
}
}
catch (IOException e)
{
throw new RuntimeException(e);
}
}
}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值