JAva基礎十一---Socket
一、UDP:無接続通信.
特徴:1.伝送効率が高い
2.セキュリティが低く、データ転送が保証されません.
開発プロセス:
送信側(クライアント):1.udpサービスDatagramSocket ds=new DatagramSocket()2を確立する.パッケージ(DatagramPacket)byte[]buff="udp test".getBytes(); DatagramPacket dp=new DatagramPacket (buf,buf.length,InetAddress.getByName("192.168.1.22"),10000); 3.送信データ:ds.send(dp); 4.リソースclose dsを閉じる.close()
受信側(サービス側):1.udpサービスDatagramSocket ds=new DatagramSocket(10000)2を定義する.パケット受信データbyte[]buff=new byte[1024]を定義する. DatagramPacket dp=new DatagramPacket (buf,buf.length); 3.udpサービスで受信パケットreceive ds.receive(dp); 4.データstring ip=dpを取り出す.getAddress().getHostAddress(); int len=dp.getLength(); String data=new String(dp.getData(),len); 5.リソースclose dsを閉じる.close();
サービス:
クライアントコード:
二、TCP:接続向けの通信.
特徴:1.伝送効率が低い
2.安全性が高い
開発プロセス:
クライアント:1.Socketサービスを作成し、ipとポートSocket socket=new Socket(「192.168.1.12」、10001)を指定します.2.データを送信、socket出力ストリームOutputStream out=socketを取得する.getOutputStream(); out.write(「tcpテスト」.getBytes();3.socket s.close()を閉じます.
サービス側:1.サービス側のsocketサービスを確立し、ポートServerSocket ss=new ServerSocket(10001)を傍受する.2.acceptメソッドにより接続するクライアントオブジェクトSocket s=ssを取得する.accept();//ブロック3.クライアントからのデータ取得InputStreamin=s.getInputStream() byte[] buf=new byte[1024]; int len=in.read(buf);//readはString data=new String(buff,0,len)をブロックします.4.リソースのクローズ
サービス側コード:
クライアントコード:
特徴:1.伝送効率が高い
2.セキュリティが低く、データ転送が保証されません.
開発プロセス:
送信側(クライアント):1.udpサービスDatagramSocket ds=new DatagramSocket()2を確立する.パッケージ(DatagramPacket)byte[]buff="udp test".getBytes(); DatagramPacket dp=new DatagramPacket (buf,buf.length,InetAddress.getByName("192.168.1.22"),10000); 3.送信データ:ds.send(dp); 4.リソースclose dsを閉じる.close()
受信側(サービス側):1.udpサービスDatagramSocket ds=new DatagramSocket(10000)2を定義する.パケット受信データbyte[]buff=new byte[1024]を定義する. DatagramPacket dp=new DatagramPacket (buf,buf.length); 3.udpサービスで受信パケットreceive ds.receive(dp); 4.データstring ip=dpを取り出す.getAddress().getHostAddress(); int len=dp.getLength(); String data=new String(dp.getData(),len); 5.リソースclose dsを閉じる.close();
サービス:
public class UdpServer extends Thread {
Handler handler;
public UdpServer(Handler handler){
this.handler=handler;
}
public void run(){
recive(handler);
}
String TAG="UdpTest_Server";
public void recive(Handler handler){
DatagramSocket ds=null;
try {
//1. udp , 10000
ds=new DatagramSocket(1000_0);
//2.
byte[] buff=new byte[1024] ;
DatagramPacket dp=new DatagramPacket (buff,buff.length);
Message msg=handler.obtainMessage(1);
msg.obj=" !";
handler.sendMessage(msg);
while (true) {
//3. udp ,receive ,
ds.receive(dp);
//4.
String ip = dp.getAddress().getHostAddress();
int len = dp.getLength();
String data = new String(dp.getData(), 0, len);
//--------- ui -------------
msg = handler.obtainMessage(1);
msg.obj = " :" + ip + " :" + data;
handler.sendMessage(msg);
}
//------------------------------
} catch (SocketException e) {
Message msg=handler.obtainMessage(1);
msg.obj="SocketException :"+e.toString();
handler.sendMessage(msg);
} catch (IOException e) {
Message msg=handler.obtainMessage(1);
msg.obj="IOException :"+e.toString();
handler.sendMessage(msg);
}finally {
//5. close
if(ds!=null)
ds.close();
}
}
}
クライアントコード:
public class UdpClient extends Thread{
String TAG="UdpTest_Client";
Handler handler;
public UdpClient(Handler handler){
this.handler=handler;
}
public void run(){
sendData(handler);
}
public void sendData(Handler handler){
//1. udp
DatagramSocket ds= null;
Message message=handler.obtainMessage();
try {
ds = new DatagramSocket();
//2.
byte[] buff="udp client test" .getBytes();
InetAddress ip=InetAddress.getByName("192.168.43.1");// IP
int port=10000;//
DatagramPacket dp = new DatagramPacket(buff,buff.length, ip,port);
//3.
ds.send(dp);
message.obj="udp !";
handler.sendMessage(message);
//
} catch (SocketException e) {
//Socket , Socket
message.obj="SocketException ="+e.toString();
handler.sendMessage(message);
}catch (UnknownHostException e) {
//IP
message.obj="UnknownHostException ="+e.toString();
handler.sendMessage(message);
} catch (IOException e) {
// I / O 。
message.obj="IOException ="+e.toString();
handler.sendMessage(message);
}finally {
if (ds != null) {
//message.obj=" ";
// handler.sendMessage(message);
ds.close();
}
}
}
}
二、TCP:接続向けの通信.
特徴:1.伝送効率が低い
2.安全性が高い
開発プロセス:
クライアント:1.Socketサービスを作成し、ipとポートSocket socket=new Socket(「192.168.1.12」、10001)を指定します.2.データを送信、socket出力ストリームOutputStream out=socketを取得する.getOutputStream(); out.write(「tcpテスト」.getBytes();3.socket s.close()を閉じます.
サービス側:1.サービス側のsocketサービスを確立し、ポートServerSocket ss=new ServerSocket(10001)を傍受する.2.acceptメソッドにより接続するクライアントオブジェクトSocket s=ssを取得する.accept();//ブロック3.クライアントからのデータ取得InputStreamin=s.getInputStream() byte[] buf=new byte[1024]; int len=in.read(buf);//readはString data=new String(buff,0,len)をブロックします.4.リソースのクローズ
サービス側コード:
public class TcpServer extends Thread {
Handler handler=null;
public TcpServer(Handler handler){
this.handler=handler;
}
public void run(){
recive(handler);
}
public void recive(Handler handler){
ServerSocket ss=null;
try {
//1. socket , 10000
ss=new ServerSocket(1000_1);
while (true){
showMsg("TCP !");
// 2. accept
Socket s=ss.accept();//
showMsg(" :"+s.getInetAddress().getHostAddress());
//3.
InputStream in=s.getInputStream();
byte[] buff=getData(in);
if(buff!=null) {
String data = new String(buff, 0, buff.length);
showMsg(" :"+s.getInetAddress().getHostAddress()+", :"+data);
}
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if(ss!=null){
try {
//4.
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private byte[] getData(InputStream in){
byte[] temp=new byte[1024];
try {
int len= in.read(temp);
return Arrays.copyOf(temp,len);
} catch (IOException e) {
showMsg(" :"+e.toString());
}
return null;
}
private void showMsg(String strMsg){
Message msg = handler.obtainMessage();
msg.obj = strMsg;
handler.sendMessage(msg);
}
}
クライアントコード:
public class TcpClient extends Thread{
Handler handle=null;
public TcpClient(Handler handler){
this.handle=handler;
}
public void run(){
send();
}
public void send(){
//1. Socket , ip
Socket socket= null;
try {
socket = new Socket("192.168.43.1",1000_1);
//2. , socket
OutputStream out=socket.getOutputStream();
out.write("tcp ".getBytes());
showMsg(" !");
} catch (IOException e) {
showMsg(" :"+ e.toString());
e.printStackTrace();
}finally {
//3. socket
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void showMsg(String data){
Message msg=handle.obtainMessage(1);
msg.obj=data;
handle.sendMessage(msg);
}
}