java.net.Socket类
使用Socket类可以把两个进程之间的通信看作一个流,并通过字节流的形式进行数据的传输。
编程思路
1.建立套接字
2.监听
3.建立连接
4.通信
5.关闭Socket,IO流
Client端
import java.net.*;
import java.io.*;
public class TcpClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1", 15519);//1
BufferedReader kbReader = new BufferedReader(new InputStreamReader(System.in));
BufferedReader sktReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter sktWriter = new PrintWriter(socket.getOutputStream());//2
String text = kbReader.readLine();
while(true){
sktWriter.write(text+"\n");
sktWriter.flush();
System.out.println("Clinet say:"+text);
text = sktReader.readLine();
System.out.println("Server say:"+text);
if(text.equals("Bye"))break;
text = kbReader.readLine();//4
}
sktReader.close();
sktWriter.close();
kbReader.close();
socket.close();//5
System.out.println("Conversation is closed!");
}catch (Exception e){
e.printStackTrace();
}
}
}
Server端
import java.net.*;
import java.io.*;
public class TcpServer {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(15519);//1
Socket socket = serverSocket.accept();//2
BufferedReader kbReader = new BufferedReader(new InputStreamReader(System.in));
BufferedReader sktReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter sktWriter = new PrintWriter(socket.getOutputStream());//3
String text = sktReader.readLine();//4
text = text.toUpperCase();
while(!text.equals("BYE")){
sktWriter.write(text+"\n");
sktWriter.flush();
text = sktReader.readLine();
text = text.toUpperCase();
}
sktWriter.write(text+"\n");
sktReader.close();//5
sktWriter.close();
kbReader.close();
socket.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
Socket端口选择
在确定socket的端口时尽量控制在1024之内,并且避开周知端口。
在选择完服务器开放的端口时记得开放端口的访问权限。