网络编程
网络编程
1.1 TCP
文件上传
- TCP客户端
package com.tcpudp;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class TcpClient {
public static void main(String[] args) throws Exception {
//创建socket连接
Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
//创建一个输出流
OutputStream outputStream = socket.getOutputStream();
//读取文件
FileInputStream fileInputStream = new FileInputStream(new File("C:\\Users\\ks\\Pictures\\1.jpg"));
//写文件
byte[] bytes = new byte[1024];
int len;
while ((len=fileInputStream.read(bytes))!=-1){
outputStream.write(bytes,0,len);
}
fileInputStream.close();
outputStream.close();
socket.close();
}
}
- TCP服务端
package com.tcpudp;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public static void main(String[] args) throws Exception {
//创建服务
ServerSocket serverSocket = new ServerSocket(9000);
//监听客户端的连接
Socket accept = serverSocket.accept(); //阻塞式监听,会一直等待客户端连接
//获取输入流
InputStream is = accept.getInputStream();
FileOutputStream fs = new FileOutputStream(new File("recive.jpg"));
byte[] bs = new byte[1024];
int len;
while ((len=is.read(bs))!=-1){
fs.write(bs,0,len);
}
fs.close();
is.close();
accept.close();
serverSocket.close();
}
}
1.2 UDP
发短信:不用连接,需要知道对方地址!
发送消息
发送端
package com.udp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UdpClient {
public static void main(String[] args) throws Exception {
//新建一个socket连接
DatagramSocket socket = new DatagramSocket();
//新建一个包
String msg = "你好啊!哈哈哈";
InetAddress localhost = InetAddress.getByName("localhost");
int port =9090;
//数据,数据的长度起始,要发送给谁
DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);
socket.send(packet);
socket.close();
}
}
接收消息
package com.udp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UdpServer {
public static void main(String[] args) throws Exception {
//开放端口
DatagramSocket socket = new DatagramSocket(9090);
//接收数据包
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length);
socket.receive(packet);//阻塞接收
System.out.println(packet.getAddress().getHostAddress());
System.out.println(new String(packet.getData(), 0, packet.getLength()));
socket.close();
}
}
循环发送消息
package com.udp.chat;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.*;
public class UdpSender {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(8888);
//准备数据:控制台读取 System.in
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String data = reader.readLine();
byte[] bytes = data.getBytes();
DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length, new InetSocketAddress("localhost", 6666));
socket.send(packet);
if(data.equals("bye")){
break;
}
}
socket.close();
}
}
package com.udp.chat;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UdpReceive {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(6666);
while (true) {
byte[] bytes = new byte[1024];
String s = new String(bytes, 0, bytes.length);
DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length);
socket.receive(packet);
byte[] packetData = packet.getData();
String string = new String(packetData, 0, packetData.length);
System.out.println(string);
if (s.equals("bye")) {
break;
}
}
socket.close();
}
}

浙公网安备 33010602011771号