版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/caoshiminYQS/article/details/86547118
TCP:
服务方:
package com.wsh.tcp.practice;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class LiSi {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(6666);
Scanner scanner = new Scanner(System.in);
Socket accept = serverSocket.accept();
byte[] bytes = new byte[1024];
InputStream inputStream = accept.getInputStream();
// 获得与这个ServerSocket连接的Socket的输出流
OutputStream outputStream = accept.getOutputStream();
new Thread(){
@Override
public void run() {
super.run();
StringBuffer sb = new StringBuffer();
int len = 0;
try {
while((len= inputStream.read(bytes)) != -1){
sb.append(new String(bytes,0,len));
System.out.println(sb);
sb.setLength(0);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
String send = "";
while (!(send = scanner.nextLine()).equals("quit")) {
// 如果输入的内容不是quit,那么程序继续
outputStream.write(send.getBytes());
}
/*String result = scanner.nextLine();
outputStream.write(result.getBytes());*/
serverSocket.close();
}
}
客户方:
package com.wsh.tcp.practice;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class ZhangSan {
static String send = "";
public static void main(String[] args) throws IOException {
// 把张三写成发送方
Socket socket = new Socket("192.168.20.195",6666);
Scanner scanner = new Scanner(System.in);
OutputStream outputStream = socket.getOutputStream();
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
new Thread(){
@Override
public void run() {
super.run();
while (!(send = scanner.nextLine()).equals("quit")) {
// 如果输入的内容不是quit,那么程序继续
try {
outputStream.write(send.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
StringBuffer sb = new StringBuffer();
int len = 0;
while((len= inputStream.read(bytes)) != -1) {
sb.append(new String(bytes, 0, len));
System.out.println(sb);
sb.setLength(0);
}
/*int read = inputStream.read(bytes);
System.out.println(new String(bytes,0,read));*/
socket.close();
// 如果输入了quit,则循环终止
// 那么关闭这个socket
}
}
UDP:
接收方:
package com.yanqiushi.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class ReceiveMain {
public static void main(String[] args) throws IOException {
// 定义一个DatagramSocket监听8080端口
DatagramSocket datagramSocket = new DatagramSocket(8080);
byte[] bytes = new byte[1024];
// 定义一个数据包,用来接受数据
DatagramPacket datagramPacket = new DatagramPacket(bytes,0,bytes.length);
while(true) {
// 调用datagramScoket的方法receive,会将datagramSocket接受到的数据,存到datagramPacket中
datagramSocket.receive(datagramPacket);
String hostName = datagramPacket.getAddress().getHostName();
// 根据datagramPacket获得的字节,创建字符串
String data = new String(datagramPacket.getData(), 0, datagramPacket.getLength());
System.out.println(data+"---from:"+hostName);
}
}
}
发送方:
package com.wsh.udp;
import com.wsh.util.Constants;
import java.io.IOException;
import java.net.*;
public class SendMain {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket = new DatagramSocket(4564);
// 创建一个地址对象,将ip地址传到构造方法中
InetAddress address = InetAddress.getByName("192.168.20.221");
byte[] bytes = new byte[1024];
bytes = "我是谁?".getBytes();
// 创建用来存储数据的数据包
DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length,address,8080);
datagramSocket.send(datagramPacket);
}
}