socket是神马就不介绍, 自行Google,
socket编程的一般步骤为:
服务器端:
- 打开服务器, 3000是端口
ServerSocket serverSocket = new ServerSocket(3000); - 监听是否有客户端的链接, 得到客户的socket,
Socket socket = serverSocket.accept(); - 得到socket的输入流和输出流(大概就这个意思吧, 不知道怎么个叫法, 如果不懂, 就去学下IO先,
其实自己也不是很懂), 注意PrintWriter的构造方法, 第二个参数为true, 表示调用println, printf, format方法后自动刷新,而不是正好输出换行符才刷新, 如果不添加这个参数, 则在后面输出信息时必须手动刷新,
(后面再看)BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter pw = new PrintWriter(socket.getOutputStream(), true); - 然后就是读取客户端的数据, 发送数据到客户端了,
服务器干完了自己的事, 接下来就是等着客户端来连接了
客户端:
- 连接到服务器(这个不要解释吧)
Socket socket = new Socket("localhost", 3000); - 同服务器端第3步, 得到socket的输入流和输出流(懒得复制粘贴了, 同上)
- 跟服务器通信总有有点什么东西通信吧, 从控制台写几个字到服务器端, 首先得到控制台输入流
BufferedReader sysin = new BufferedReader(new InputStreamReader(System.in)); - 发送数据到服务器, 接收从服务器上返回的信息
全部代码如下:
ServerSocketTest.java
SocketTest.java
好了, 下一篇是多线程的Socket。
package net.step1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerSocketTest {
public static void main(String args[]) throws IOException {
ServerSocket serverSocket = new ServerSocket(3000);
System.out.println("服务器启动");
Socket socket = null;
while (true) {
try {
socket = serverSocket.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
InetAddress addr = socket.getInetAddress();
System.out.println("Client's Ip Address: " + addr);
System.out.println("Client's port: " + socket.getPort());
String msg;
// 读取客户端的信息
while ((msg = br.readLine()) != null) {
System.out.println("client say: " + msg);
// 这里按照我的理解是这里的信息有点类似于马桶里的..., 如果不自刷新的话,
// 你每次都调用flush() 函数才能冲走, 现在变智能了, 你使用println() 自动就发送出去了(冲走了).
pw.println("server echo: " + msg);
//pw.flush();
// 如果客户端说 "bye" 就拜了, 就结束这次通话了
if (msg.equals("bye")) {
break;
}
}
} catch (IOException e) {
} finally {
socket.close();
}
}
}
}
SocketTest.java
package net.step1;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class SocketTest {
public static void main(String args[]) throws Exception{
Socket socket = new Socket("localhost", 3000);
System.out.println("Connecting to the Server");
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
BufferedReader sysin = new BufferedReader(new InputStreamReader(System.in));
String msg;
// 读取控制台的输入
while ((msg = sysin.readLine()) != null){
pw.println(msg);
System.out.println(br.readLine());
// 跟服务器说 bye
if (msg.equals("bye")){
break;
}
}
}
}
好了, 下一篇是多线程的Socket。
714

被折叠的 条评论
为什么被折叠?



