socket的详细介绍,请点击
socket的详细介绍,链接2
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 Server extends Thread {
//创建一个ServerSocket,用于监听客户端Socket连接请求
ServerSocket server = null;
Socket socket = null;
public Server(int port) {
try {
server = new ServerSocket(port);
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
super.run();
try {
System.out.println("wait client connect...");
//侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞
socket = server.accept();
new sendMessThread().start();
System.out.println(socket.getInetAddress().getHostAddress()+"SUCCESS TO CONNECT...");
InputStream in = socket.getInputStream();
int len = 0;
byte[] buf = new byte[1024];
while ((len = in.read(buf)) != -1) {
System.out.println("client saying: " + new String(buf, 0, len));
}
} catch (IOException e) {
e.printStackTrace();
}
}
class sendMessThread extends Thread {
public void run() {
super.run();
Scanner scanner = null;
OutputStream out = null;
try {
if (socket != null) {
scanner = new Scanner(System.in);
out = socket.getOutputStream();
String in = "";
do {
in = scanner.next();
out.write(("server saying: " + in).getBytes());
out.flush();
}while (!in.equals("q"));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Server server = new Server(1234);
server.start();
}
}
package Test;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Client extends Thread {
//定义一个Socket对象
Socket socket = null;
public Client(String host, int port) {
try {
//需要服务器的IP地址和端口号,才能获得正确的Socket对象
socket = new Socket(host, port);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
//客户端一连接就可以写数据个服务器了
new sendMessThread().start();
super.run();
try {
// 读Sock里面的数据
InputStream s = socket.getInputStream();
byte[] buf = new byte[1024];
int len = 0;
while ((len = s.read(buf)) != -1) {
System.out.println(new String(buf, 0, len));
}
} catch (IOException e) {
e.printStackTrace();
}
}
//往Socket里面写数据,需要新开一个线程
class sendMessThread extends Thread{
public void run() {
super.run();
//写操作
Scanner scanner = null;
OutputStream os = null;
try {
scanner = new Scanner(System.in);
os = socket.getOutputStream();
String in = "";
do {
in = scanner.next();
os.write(("" + in).getBytes());
os.flush();
} while (!in.equals("bye"));
} catch (IOException e) {
e.printStackTrace();
}
scanner.close();
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
//需要服务器的正确的IP地址和端口号
Client clientTest = new Client("127.0.0.1", 1234);
clientTest.start();
}
}
简化版服务端
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(9050);
System.out.println("waiting...");
//等待client的请求
Socket socket = server.accept();
while (true) {
// 接收客户端的数据
DataInputStream in = new DataInputStream(socket.getInputStream());
String string = in.readUTF();
System.out.println("client:" + string);
// 发送给客户端数据
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeUTF("hi,i am hserver!i say:" + string);
}
}
}
客户端
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket = new Socket("localhost", 9050);
while (true) {
try {
System.out.println("please input...");
Scanner scanner = new Scanner(System.in);
String p = scanner.nextLine();
// 发送给服务器的数据
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeUTF(p);
// 接收服务器的返回数据
DataInputStream in = new DataInputStream(socket.getInputStream());
System.out.println("server:" + in.readUTF());
} catch (Exception e) {
socket.close();
e.printStackTrace();
}
}
}
}