----------------------android培训、java培训、期待与您交流! ----------------------
老规矩先上代码
这是服务端:
import java.net.*;
import java.io.*;
public class Server {
public static void main(String[] args){
new Server();
}
//定义 服务器套字节
private ServerSocket serversocket = null;
private Socket socket = null;
Server(){
try {
init();
} catch (Exception e) {
e.printStackTrace();
}
}
//初始化
private void init() throws Exception{
//在10000端口监听
serversocket = new ServerSocket(10000);
System.out.println("服务器已经启动,监听10000端口");
while(true)
{
//阻塞
socket = serversocket.accept();
System.out.println(socket.getInetAddress().getHostAddress()+"试图连接");
//启动线程
new Thread(new Worker(socket)).start();
}
}
//创建 worker 内部类 实现多线程
class Worker implements Runnable{
private Socket socket=null;
//socket输入流,用于接受客户端发来的信息
private BufferedReader bufIn = null;
//socket输出流,用于回发信息
private BufferedWriter bufOut = null;
//构造函数
//
Worker(Socket socket){
this.socket = socket;
try {
//得到socket输入流
bufIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//得到socket输出流
bufOut = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run() {
// TODO Auto-generated method stub
System.out.println(socket.getInetAddress().getHostAddress()+" 线程启动");
try {
bufOut.write("欢迎你");
bufOut.newLine();
bufOut.flush();
String line = null;
while((line=bufIn.readLine())!=null)
{
bufOut.write(line.toUpperCase());
bufOut.newLine();
bufOut.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class Client {
public static void main(String[] args){
new Client();
}
private Socket socket;
//socket输入流
private BufferedReader bufIn;
//socket输出流
private BufferedWriter bufOut;
//键盘输入流
private BufferedReader in;
Client(){try {
init();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
private void init() throws Exception {
//连接 10.1.6.166 的10000端口
socket = new Socket("10.1.6.166",10000);
//得到键盘输入流
in = new BufferedReader(new InputStreamReader(System.in));
//从socket中得到 输入输出流
bufIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
bufOut = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String keys=null;
System.out.println(bufIn.readLine());
while(!(keys=in.readLine()).equals("over"))
{
bufOut.write(keys);
bufOut.newLine();
bufOut.flush();
System.out.println(bufIn.readLine());
}
socket.close();
}
}
这事客户端:
public class Client {
public static void main(String[] args){
new Client();
}
private Socket socket;
//socket输入流
private BufferedReader bufIn;
//socket输出流
private BufferedWriter bufOut;
//键盘输入流
private BufferedReader in;
Client(){try {
init();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
private void init() throws Exception {
//连接 10.1.6.166 的10000端口
socket = new Socket("10.1.6.166",10000);
//得到键盘输入流
in = new BufferedReader(new InputStreamReader(System.in));
//从socket中得到 输入输出流
bufIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
bufOut = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String keys=null;
System.out.println(bufIn.readLine());
while(!(keys=in.readLine()).equals("over"))
{
bufOut.write(keys);
bufOut.newLine();
bufOut.flush();
System.out.println(bufIn.readLine());
}
socket.close();
}
}
源码功能也是根据视频学习的,Client发给服务器一串单词,服务器返回给Client大写字符串
程序比较简单,但可以清楚的体现编写Socket程序几个必要的流程
1,创建socket连接(服务器就创建ServerSocket等待Socket接入)
2,获得Socket的输入输出流,
3,接收或发送数据
就目前看来Socket程序主要的还是IO流的应用,能不能清晰的理出程序所需要的数据流、能不能清晰的划分出他们之间的关系、能不能很好的选择合适的数据流
应该直接影响到程序的效率和健壮性。
----------------------android培训、java培训、期待与您交流! ----------------------