套接字—Socket
1、编写服务器端程序:
创建一个服务器套接字(ServerSocket),绑定到指定端口;
调用accept方法,侦听来自客户端的请求,如果客户发出请求,则接受连接,返回通信套接字(Socket);
调用Socket的getInputStream和getOutputStream方法,获得输入/输出流,开始网络数据的接收和发送;
关闭通信套接字,关闭服务器套接字。
2、编写客户端程序:
创建一个套接字(Socket) ,向服务器的侦听端口发出请求;
与服务器正确连接后,调用Socket的getInputStream和getOutputStream方法,获得输入/输出流,开始网络数据的接收和发送;
关闭通信套接字。
案例2:完成控制台聊天程序,任意一方输入bye聊天结束。用两个线程模拟读取和写出数据,接收用户控制台输入的内容,
用Data数据流操作UTF格式的数据
客户端:
package com.chinasofti.io0731.net;
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class ClientThread extends Thread {
@Override
public void run() {
try {
Socket socket = new Socket("10.96.10.189", 8080);
InputStream is = socket.getInputStream();
DataInputStream dis = new DataInputStream(is);
OutputStream os = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
Scanner scanner = new Scanner(System.in);
while (true) {
dos.writeUTF(scanner.next());
dos.flush();
System.out.println("--------------");
String msg = dis.readUTF();
System.out.println("服务器say:"+msg);
if ("bye".equals(msg)) {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务端:
package com.chinasofti.io0731.net;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class ServerThread extends Thread {
@Override
public void run() {
//ServerSocket
try {
ServerSocket serverSocket = new ServerSocket(8080);
//等待连接
Socket socket = serverSocket.accept();//
if (socket != null) {
System.out.println("------客户端连接成功!-------");
InputStream is = socket.getInputStream();
DataInputStream dis = new DataInputStream(is);
OutputStream os = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
Scanner scanner = new Scanner(System.in);
while (true) {
String msg = dis.readUTF();
System.out.println("客户端say:"+msg);
// String msg = reply(is, os, baos);
if ("bye".equals(msg)) {
break;
}
dos.writeUTF(scanner.next());
System.out.println("服务端写出完成");
dos.flush();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
测试代码:
客户端测试:
package com.chinasofti.io0731.net;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class TestClient {
public static void main(String[] args) {
//
new ClientThread().start();
}
}
服务端测试:
package com.chinasofti.io0731.net;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class TestServer {
public static void main(String[] args) {
new ServerThread().start();
}
}