初学了Socket编程,有什么不对的地方,请多多指教。
学习了一下Socket,为了方便以后复习,就写了这篇博客。
理论的就不多讲了,初学了一下socket,就写了一个例子,一个客户端,一个服务器端。
服务器端:
package com.seehope.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
//服务器端,多线程并发实现多个客户端请求服务器
public class ServerThread extends Thread {
private Socket sk;
//构造方法
public ServerThread(Socket sk) {
this.sk = sk;
}
@Override
public void run() {
InputStream in = null;
OutputStream os = null;
PrintStream ps = null;
BufferedReader br = null;
try {
//获得输入输出低端流
in = sk.getInputStream();
os = sk.getOutputStream();
br = new BufferedReader(new InputStreamReader(in));
//输出流,输出的是字节流,若要输出字符,使用PrintWriter。PrintStream 永远不会抛出 IOException
ps = new PrintStream(os);
boolean flag = true;
while(flag){
String line = br.readLine();
ps.println("服务器说:"+line);
if("bye".equals(line)){
flag = false;
}
//返回给客户端
ps.flush();
}
ps.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException{
Socket socket = null;
ServerSocket serverSocket = new ServerSocket(8899);
System.out.println("服务器正在监听...");
while(true){
socket = serverSocket.accept();//阻塞,监听客户端的请求
System.out.println(socket.getRemoteSocketAddress()+" 链接成功!");
ServerThread st = new ServerThread(socket);
//启动线程
st.start();
}
}
}
客户端:
package com.seehope.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
//客户端
public class ClientSocket {
public static void main(String[] args) {
InputStream in = null;
OutputStream os = null;
PrintStream ps = null;
BufferedReader br = null;
System.out.println("------客户端程序-----");
try {
//创建socket实例,设置ip地址和要监听的端口
Socket socket = new Socket("127.0.0.1",8899);
os = socket.getOutputStream();
ps = new PrintStream(os);
in = socket.getInputStream();
br = new BufferedReader(new InputStreamReader(in));
String line = null;
boolean flag = true;
while(flag){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入信息:");
line = scanner.nextLine();
if("bye".equals(line)){
flag = false;
}
ps.println(line);//写给服务器
ps.flush();
//读取服务器返回的内容
System.out.println(br.readLine());
}
ps.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}