Socket

Socket

定义:

 

两个java应用程序可通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Socket

Socket通常用来实现client-server连接java.net包中定义的两个类Socket和ServerSocket,分别用来实现双向连接的client和server端建立连接时所需的寻址信息为远程计算机的IP地址和端口号(prot number)

 

 

TCP协议/UDP协议

TCP(transmission control protocol)

是专门设计用于在不可靠的因特网上提供可靠的、端到端的字节流通信的协议,它是一种面向连接的协议。TCP连接是字节流而非报文流


UDP(user data protocol)

UDP向应用程序提供一种发送封装的原始IP数据的方法、并且发送时无需建立连接。是一种不可靠的连接(例\音频、视频)

 

TCP示例

 

 

import java.net.*;

import java.io.*;

//Socket服务端

public class TcpSocketService{

public static void main(String args[]){

try{


ServerSocket ss = new ServerSocket(5678);

Socket s = ss.accept();

InputStream in = s.getInputStream();

DataInputStream dis = new DataInputStream(in);

System.out.println(dis.readUTF());

dis.close();

s.close();


System.out.println("=="+s.getInetAddress()+"==="+s.getLocalPort());

}catch(Exception e){


System.out.println(e.getMessage());

}


}


}

----------------------------------------------------

 

import java.net.*;

import java.io.*;

//client

public class TcpSocketClient{

public static void main(String args[]){

 

try{

Socket s = new Socket("localhost",5678);

OutputStream os = s.getOutputStream();

DataOutputStream dos = new DataOutputStream(os);

dos.writeUTF("hello server");

dos.flush();

dos.close();

s.close();

}catch(Exception e){

System.out.println(e.getMessage());

}

}


}

UDP示例

 

import java.net.*;

import java.io.*;

public class UdpServer

{

public static void main(String args[]) throws Exception{


byte[] buf = new byte[1024];

//此类表示数据报包

DatagramPacket dp = new DatagramPacket(buf,buf.length);

//此类表示用来发送和接收数据报包的套接字。 

DatagramSocket ds = new DatagramSocket(6666);

while(true){

//接收数据报包

ds.receive(dp);

ByteArrayInputStream bais = new ByteArrayInputStream(buf);

DataInputStream dis = new DataInputStream(bais);


//Long类型

System.out.println(dis.readLong());

//字符串类型

//System.out.println(new String(buf,0,dp.getLength()));

//ds.close();

}

}


}

-----------------------------------------------------------------------------------

 

import java.net.*;

import java.io.*;

public class UdpClient

{

public static void main(String args[]) throws Exception{


//发送long类型

long l = 10000L;

ByteArrayOutputStream baos = new ByteArrayOutputStream();

DataOutputStream dos = new DataOutputStream(baos);

dos.writeLong(l);


byte[] buf = baos.toByteArray();


//byte[] buf = (new String("hello")).getBytes();


//此类表示数据报包

DatagramPacket dp = new          

DatagramPacket(buf,buf.length,new InetSocketAddress("http://www.eshow365.cn",6666));

//此类表示用来发送和接收数据报包的套接字。8888向6666发送数据 

DatagramSocket ds = new DatagramSocket(8888);

//发送数据报包

ds.send(dp);

ds.close();

}


}

你可能感兴趣的:(socket,tcp,UDP)