JAvaのsocketプログラミング
3012 ワード
Socketはネットワークサービスのために提供されるメカニズムであり、ネットワーク通信の両端にSocketがあり、1つのSocketは1つのIPアドレスと1つのポート番号によって一意に決定される.データは2つのSocket間でIOを介して転送される.
1.その伝送方式は2種類あり、UDP伝送とTCP伝送:
UDP伝送:データを送信する前に接続を確立する必要がなく、スピードが速い;信頼できないプロトコルです.各パケットのサイズは64 kbに制限されている.主にインターネットのスクリーン会議、デスクトップ共有などに応用され、データをなくしても結果に影響を与えない.
TCP伝送:データを送信する前に接続を確立し、信頼できるプロトコルである.しかし、効率は低い.ビッグデータ転送が可能です.主にファイル転送,ダウンロードなどに応用され,データの完全性に要求が高い.
2.socket伝送プロセス:
(1)socketサービスの確立,パケットの確立
UDP:datagramsocketとdatagrampacket
TCP:クライアントsocketとサービス側server socket
(2)送信側と受信側の確立
送信側:パケットオブジェクトに宛先を明確にするipおよびポート
≪受信側|Receiver|ldap≫:リスニングするポートを指定します.
(3)呼び出しsocketの送受信方法
(4)SOcketサービスのクローズ
3.UDP伝送例:
4.TCPワンウェイ転送例:
1.その伝送方式は2種類あり、UDP伝送とTCP伝送:
UDP伝送:データを送信する前に接続を確立する必要がなく、スピードが速い;信頼できないプロトコルです.各パケットのサイズは64 kbに制限されている.主にインターネットのスクリーン会議、デスクトップ共有などに応用され、データをなくしても結果に影響を与えない.
TCP伝送:データを送信する前に接続を確立し、信頼できるプロトコルである.しかし、効率は低い.ビッグデータ転送が可能です.主にファイル転送,ダウンロードなどに応用され,データの完全性に要求が高い.
2.socket伝送プロセス:
(1)socketサービスの確立,パケットの確立
UDP:datagramsocketとdatagrampacket
TCP:クライアントsocketとサービス側server socket
(2)送信側と受信側の確立
送信側:パケットオブジェクトに宛先を明確にするipおよびポート
≪受信側|Receiver|ldap≫:リスニングするポートを指定します.
(3)呼び出しsocketの送受信方法
(4)SOcketサービスのクローズ
3.UDP伝送例:
class UdpSend{
public static void main(String[] args) throws Exception{
//1, udp 。 DatagramSocket 。
DatagramSocket ds = new DatagramSocket(8888);
//2, , 。
byte[] buf = "udp ge men lai le ".getBytes();
DatagramPacket dp =
new DatagramPacket(buf,buf.length,InetAddress.getByName("222.195.152.1"),5000);
//3, socket , 。 send 。
ds.send(dp);
//4, 。
ds.close();
}
}
class UdpReceive{
public static void main(String[] args) throws Exception
{
//1, udp socket, 。
DatagramSocket ds = new DatagramSocket(5000);
while(true)
{
//2, 。 。
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
//3, receive 。
ds.receive(dp);// 。
//4, 。
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(),0,dp.getLength());
int port = dp.getPort();
System.out.println(ip+":"+data+":"+port);
}
//5,
//ds.close();
}
}
4.TCPワンウェイ転送例:
import java.io.*;
import java.net.*;
class TcpClient{
public static void main(String[] args) throws Exception {
// socket 。
Socket s = new Socket("222.195.152.1",5001);
// , socket 。
OutputStream out = s.getOutputStream();
out.write("test tcp communication".getBytes());
s.close();
}
}
class TcpServer{
public static void main(String[] args) throws Exception{
// socket 。 。
ServerSocket ss = new ServerSocket(5001);
// accept 。
while(true)
{
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"has been connected");
// , 。
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println(new String(buf,0,len));
s.close();// .
}
//ss.close();//
}
}