1.TCP
服务端
package day26.net;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务端 socket
* 1.监听所有客户端连接
* 2.接收所有客户端发送来的数据
* 3.发送给客户端数据
* */
public class ServerSocketDemo {
public static void main(String[] args) throws IOException {
// 1.创建一个ServerSock对象,并绑定本机的端口号
ServerSocket server=new ServerSocket(9999);
//2.阻塞监听客户端连接的对象 端点
System.out.println("等待客户端连接。。。");
Socket socket=server.accept();
System.out.println("客户端连接");
//3.接收客户端发送来的数据 读取数据
FileInputStream in=(FileInputStream)socket.getInputStream();
//创建一个缓冲数组
byte[]buf=new byte[1024];
int len=0;
while ((len=in.read(buf))!=-1) {
//处理数据
String str=new String(buf,0,len);
System.out.println("接收到的数据:"+str);
}
//4.关闭流
in.close();
//5.关闭socket
socket.close();
}
}
客户端
package day26.net;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* 客户端socket
* 1.连接服务器socket对象
* 2.发送数据给服务器
* 3.接收服务器返回的数据
* */
public class ClientSocketDemo {
public static void main(String[] args) throws UnknownHostException, IOException {
// 1.创建客户端socket对象,指定要连接的服务器端口号和主机地址,自动连接服务器
Socket client=new Socket("127.0.0.1", 9999);
//2.给服务器发送数据 写操作,输出流
FileOutputStream out=(FileOutputStream) client.getOutputStream();
//发送数据
out.write("Hello ServerSocket!".getBytes());
//刷入
out.flush();
//关闭流
out.close();
//关闭socket
client.close();
}
}
2.UDP
package day28.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
/**
* UDP是一个不可靠的连接协议
* 数据发送都是以报文进行发送的
* */
public class SendMsg {
public static void main(String[] args) throws IOException {
// 1.创建socket对象
DatagramSocket socket=new DatagramSocket(9098);
//2.创建要发送的报文,报文:地址和数据
String msg="Hello Java!";
//构建报文
byte[]buf=msg.getBytes();
DatagramPacket packet=new DatagramPacket(buf, buf.length,InetAddress.getByName("127.0.0.1"),9099);
//3.发送报文
socket.send(packet);
//4.设置包的长度
buf=new byte[1024];
packet.setData(buf, 0, buf.length);
//接收数据
socket.receive(packet);
//处理数据
System.out.println("接收到的数据是:"+new String(packet.getData(),0,packet.getLength()));
System.out.println("IP:"+packet.getAddress().getHostAddress()+"\tPort:"+packet.getPort());
//4.关闭socket
socket.close();
}
}