一、Socket套接字
Socket是基于TCP协议的,用来连接客户端与服务端,下面给出两个简单的通信实例,例1并不能像QQ那样进行随意的收发信息,只能客户端发一条,服务端发一条,例2却可以随意收发信息。
例1、
服务端
import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String args[]){ Socket socket ; try { ServerSocket serverSocket = new ServerSocket(9999); System.out.println("等待连接……"); socket = serverSocket.accept(); System.out.println("Client" + "连接成功" + socket.getInetAddress()); InputStream inputStream = socket.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream()); DataInputStream dataInputStream = new DataInputStream(inputStream); while (true) { System.out.println(dataInputStream.readUTF()); String str = "Server:" + bufferedReader.readLine(); dataOutputStream.writeUTF(str); System.out.println(str); } } catch (IOException e){ e.getMessage(); } } } 客户端
import java.io.*; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; public class Client { public static void main(String args[]) { Socket socket; try { System.out.println("正在连接服务器"); socket = new Socket("10.8.3.79",9999); if(socket.isConnected()){ System.out.println("连接成功"); } else { System.out.println("连接失败,退出"); System.exit(0); } BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); OutputStream outputStream = socket.getOutputStream(); DataOutputStream dataOutputStream = new DataOutputStream(outputStream); InputStream inputStream = socket.getInputStream(); DataInputStream dataInputStream = new DataInputStream(inputStream); while (true) { String str1 = "Client:" + bufferedReader.readLine(); dataOutputStream.writeUTF(str1); System.out.println(str1); System.out.println(dataInputStream.readUTF()); } } catch (IOException e){ e.getMessage(); } } }
说明:有的人在写这样的实例时,会把新建的流放在循环中,虽然也能达到同样的效果,但是却不可取!
例2、
服务端
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class Test11 {
public static Socket socket = null;
class Accept implements Runnable{
@Override
public void run(){
try {
DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
while (true){
String str = dataInputStream.readUTF();
System.out.println(str);
}
}
catch (IOException e){
e.getMessage();
}
}
}
class Send implements Runnable{
@Override
public void run(){
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
OutputStream outputStream = socket.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
while (true){
String str = "Server:" + bufferedReader.readLine();
dataOutputStream.writeUTF(str);
System.out.println(str);
}
}
catch (IOException e){
e.getMessage();
}
}
}
public static void main(String args[]){
try {
ServerSocket serverSocket = new ServerSocket(8888);
socket = serverSocket.accept();
Test11 test11 = new Test11();
Test11.Accept accept = test11.new Accept();
Thread thread = new Thread(accept);
thread.start();
Test11.Send send = test11.new Send();
Thread thread1 = new Thread(send);
thread1.start();
}
catch (IOException e){
e.getMessage();
}
}
}
客户端
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class Test30 {
public static Socket socket1 = null;
class Accept implements Runnable{
@Override
public void run(){
try {
DataInputStream dataInputStream = new DataInputStream(socket1.getInputStream());
while (true){
String str = dataInputStream.readUTF();
System.out.println(str);
}
}
catch (IOException e){
e.getMessage();
}
}
}
class Send implements Runnable{
@Override
public void run(){
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
OutputStream outputStream = socket1.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
while (true){
String str = "Client:" + bufferedReader.readLine();
dataOutputStream.writeUTF(str);
System.out.println(str);
}
}
catch (IOException e){
e.getMessage();
}
}
}
public static void main(String args[]){
try {
socket1 = new Socket("10.8.3.79",8888);
Test30 test30 = new Test30();
Test30.Accept accept = test30.new Accept();
Thread thread = new Thread(accept);
thread.start();
Test30.Send send = test30.new Send();
Thread thread1 = new Thread(send);
thread1.start();
}
catch (IOException e){
}
}
}