シングルチャットウィジェット
10079 ワード
クライアントアクセス要求を待つためにサービス側を作成する必要があります
次にクライアントを作成します
使用するプロトコル:tcphttps://baike.baidu.com/item/TCP/33012?fr=aladdinは、主にtcpの3回の握手プロセス確立接続TCPがインターネットにおける伝送層プロトコルであり、3回の握手プロトコルを用いて接続を確立することを理解する必要がある.アクティブ側がSYN接続要求を発行すると、図2 TCPの三次握手図2 TCPの三次握手SYN+ACKに対する相手の回答を待ち、最終的に相手のSYNに対してACK確認を行う.この接続を確立する方法は、TCPが使用するトラフィック制御プロトコルが可変サイズのスライドウィンドウプロトコルである誤った接続を防止することができる.[3]TCPの3回の握手の過程は以下の通りである:クライアントはSYN(SEQ=x)メッセージをサーバー側に送信し、SYN_に入るSEND状態.サーバ側はSYNメッセージを受け取り、SYN(SEQ=y)ACK(ACK=x+1)メッセージに応答し、SYN_RECV状態.クライアントはサーバ側のSYNメッセージを受け取り,ACK(ACK=y+1)メッセージに応答してEstablished状態に入る.3回の握手が完了すると、TCPクライアントとサーバ側の接続が成功し、データの転送を開始することができます.接続終了接続を確立するには3回の握手が必要であり、接続を終了するには4回の握手が必要であり、これはTCPのハーフクローズ(half-close)によるものである.具体的な手順を下図に示します.[3]図3のTCP接続の終了図3のTCP接続の終了(1)あるアプリケーションプロセスは、まずcloseを呼び出し、そのエンドが「アクティブクローズ」(active close)を実行すると称する.このエンドのTCPは、FINセクションを送信し、データの送信が完了したことを示す.(2)このFINを受信したピアは、TCPによって確認される「パッシブクローズ」(passive close)を実行する.注意:FINの受信は、FINの受信が対応する接続に追加のデータが受信されないことを意味するため、FINの受信は、受信側アプリケーションプロセスが対応する接続上で追加のデータを受信できないことを意味するため、FINの受信もファイル終了子(end-of-file)として受信側アプリケーションプロセスに渡される.(3)しばらくすると、このファイル終了子を受信したアプリケーションプロセスはcloseを呼び出してソケットを閉じる.これにより、TCPもFINを送信する.(4)この最終FINを受信した送信元TCP(すなわち、アクティブクローズを実行する側)は、このFINを確認する.[3]各方向に1つのFINと1つのACKが必要である以上、通常は4つのセクションが必要である.なお、(1)「通常」とは、場合によっては、ステップ1のFINがデータとともに送信され、また、ステップ2とステップ3で送信されたセクションは、いずれもパッシブクローズを実行する側から出ており、1つのセクションに統合される可能性があることを意味する.(2)ステップ2とステップ3の間で、パッシブクローズを実行する端からアクティブクローズを実行する端までのフローデータを「ハーフクローズ」(half-close)と呼ぶことができる.(3)Unixプロセスが自発的に(exitを呼び出すかmain関数から戻るか)または非自発的に(本プロセスを終了する信号を受信するか)終了すると、開いているすべての記述子が閉じられ、それでも開いている任意のTCP接続にFINが発行される.クライアントでもサーバでも、どちらのエンドでもアクティブなシャットダウンを実行できます.通常、お客様はアクティブクローズを実行しますが、HTTP/1.0などのプロトコルでは、サーバがアクティブクローズを実行します.
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author: Ren
* @date: 2020-08-03 14:13
* @description:
*/
public class TcpSever {
public static void main(String[] args) throws IOException {
// 8888, 8888
// 1、 ServerSocket,
ServerSocket serverSocket = new ServerSocket(8888);
// 2、 serversocket , tcp , ,
Socket socket = serverSocket.accept();
// 3、
InputStream in = socket.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
// 4、 , socket SeverSocket
in.close();
socket.close();
serverSocket.close();
System.out.println(" :"+new String(buf,0,len,("utf-8")));
}
}
次にクライアントを作成します
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
/**
* @author: Ren
* @date: 2020-08-03 14:13
* @description:
*/
public class TcpClient {
public static void main(String[] args) throws IOException {
// ip,
String destIp = "127.0.0.1";// ,
short port = 8888;
// socke
Socket socket = new Socket(destIp, port);
//
OutputStream out = socket.getOutputStream();
out.write(" ".getBytes("utf-8"));
// socket
out.close();
socket.close();
}
}
使用するプロトコル:tcphttps://baike.baidu.com/item/TCP/33012?fr=aladdinは、主にtcpの3回の握手プロセス確立接続TCPがインターネットにおける伝送層プロトコルであり、3回の握手プロトコルを用いて接続を確立することを理解する必要がある.アクティブ側がSYN接続要求を発行すると、図2 TCPの三次握手図2 TCPの三次握手SYN+ACKに対する相手の回答を待ち、最終的に相手のSYNに対してACK確認を行う.この接続を確立する方法は、TCPが使用するトラフィック制御プロトコルが可変サイズのスライドウィンドウプロトコルである誤った接続を防止することができる.[3]TCPの3回の握手の過程は以下の通りである:クライアントはSYN(SEQ=x)メッセージをサーバー側に送信し、SYN_に入るSEND状態.サーバ側はSYNメッセージを受け取り、SYN(SEQ=y)ACK(ACK=x+1)メッセージに応答し、SYN_RECV状態.クライアントはサーバ側のSYNメッセージを受け取り,ACK(ACK=y+1)メッセージに応答してEstablished状態に入る.3回の握手が完了すると、TCPクライアントとサーバ側の接続が成功し、データの転送を開始することができます.接続終了接続を確立するには3回の握手が必要であり、接続を終了するには4回の握手が必要であり、これはTCPのハーフクローズ(half-close)によるものである.具体的な手順を下図に示します.[3]図3のTCP接続の終了図3のTCP接続の終了(1)あるアプリケーションプロセスは、まずcloseを呼び出し、そのエンドが「アクティブクローズ」(active close)を実行すると称する.このエンドのTCPは、FINセクションを送信し、データの送信が完了したことを示す.(2)このFINを受信したピアは、TCPによって確認される「パッシブクローズ」(passive close)を実行する.注意:FINの受信は、FINの受信が対応する接続に追加のデータが受信されないことを意味するため、FINの受信は、受信側アプリケーションプロセスが対応する接続上で追加のデータを受信できないことを意味するため、FINの受信もファイル終了子(end-of-file)として受信側アプリケーションプロセスに渡される.(3)しばらくすると、このファイル終了子を受信したアプリケーションプロセスはcloseを呼び出してソケットを閉じる.これにより、TCPもFINを送信する.(4)この最終FINを受信した送信元TCP(すなわち、アクティブクローズを実行する側)は、このFINを確認する.[3]各方向に1つのFINと1つのACKが必要である以上、通常は4つのセクションが必要である.なお、(1)「通常」とは、場合によっては、ステップ1のFINがデータとともに送信され、また、ステップ2とステップ3で送信されたセクションは、いずれもパッシブクローズを実行する側から出ており、1つのセクションに統合される可能性があることを意味する.(2)ステップ2とステップ3の間で、パッシブクローズを実行する端からアクティブクローズを実行する端までのフローデータを「ハーフクローズ」(half-close)と呼ぶことができる.(3)Unixプロセスが自発的に(exitを呼び出すかmain関数から戻るか)または非自発的に(本プロセスを終了する信号を受信するか)終了すると、開いているすべての記述子が閉じられ、それでも開いている任意のTCP接続にFINが発行される.クライアントでもサーバでも、どちらのエンドでもアクティブなシャットダウンを実行できます.通常、お客様はアクティブクローズを実行しますが、HTTP/1.0などのプロトコルでは、サーバがアクティブクローズを実行します.