socket的通信模型
(1)服务器端简历倾听socket(ServerSocket);
(2)客户端创建socket并向服务器端发送。
(3)服务器端接收socket,获取其中的流并进行处理。
服务器端:
package day812_1;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer1 {
public static void main(String[] args) throws IOException {
//创建服务器套接字,并指定端口号
ServerSocket serverSocket = new ServerSocket(10010);
//监听,并返回套接字
System.out.println("客户端运行中。。。。");
Socket socket = serverSocket.accept();
//获取输入流
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String s = br.readLine();
System.out.println("客户端说: "+s);
bw.write("我知道了,谢谢您");
bw.newLine();
bw.flush();
br.close();
bw.close();
socket.close();
serverSocket.close();
}
}
客户端:
package day812_1;
import java.io.*;
import java.net.Socket;
public class TCPClient1 {
public static void main(String[] args) throws IOException {
Socket socket =new Socket("10.9.21.229",10010);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
bw.write("你好啊!银虫");
bw.newLine();
bw.flush();
System.out.println("服务器说"+br.readLine());
br.close();
bw.close();
socket.close();
}
}
注意事项:
1、服务器与客户端的端口号必须保持一致。客户端中socket的地址为要传输的地址。
2、写入流写入的时候,最好要加换行的关键字进行修饰,其原因是入过读取完之后还需要进行其他操作的话,readline没有读到换行符将不会有返回值,而导致程序卡死,如果读取完之后立刻关闭资源的话不需要添加。
文件传输与普通io流传输差不多,附上代码:
FIleServer :
package day812_1;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class FIleServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(18810);
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
FileOutputStream fio = new FileOutputStream("src\\day812_1\\a.png");
byte[] brr = new byte[1024];
int len = -1;
while((len = inputStream.read(brr))!=-1){
fio.write(brr,0,len);
fio.flush();
}
fio.close();
inputStream.close();
socket.close();
serverSocket.close();
}
}
==============================================================================================
FileClient :
package day812_1;
import java.io.*;
import java.net.Socket;
public class FileClient {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("10.9.21.229",8888);
OutputStream os = socket.getOutputStream();
FileInputStream in = new FileInputStream("C:\\Users\\Administrator\\Pictures\\49.png");
byte[] byt = new byte[1024];
int len =-1;
while ((len=in.read(byt))!=-1){
os.write(byt,0,len);
os.flush();
}
in.close();
os.close();
socket.close();
}
}
Socket通信原理与实践
本文详细介绍了Socket通信的基本原理,包括服务器端与客户端的通信流程。通过具体代码示例,展示了如何使用Java实现TCP服务器与客户端的数据交互,以及文件传输过程。

被折叠的 条评论
为什么被折叠?



