最近在搞数据交换中心,但是我是属于菜鸟级别的,特别是网络编程这块,哎,没办法,现学现用了。。。= =、
我是新人啦,所以对代码不是很熟悉,很多时候直接复制粘贴,Eclipse不是有个提示功能么,记住几个字母就OK了。。。哈哈
首先来个服务端:
1 package org.demo.servers; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.io.PrintWriter; 7 import java.net.ServerSocket; 8 import java.net.Socket; 9 10 public class SingleServer { 11 private static final int Port = 8080; 12 private ServerSocket serverSocket; 13 14 public SingleServer() throws IOException{ 15 serverSocket = new ServerSocket(Port); 16 System.out.println("服务端正在运行,监听端口:"+Port); 17 } 18 19 public void service() throws IOException{ 20 while(true){ 21 //获取请求 22 Socket socket = serverSocket.accept(); 23 System.out.println("新的请求来自于:"+socket.getInetAddress()+",端口为:"+socket.getPort()); 24 //由系统标准输入设备构造BufferedReader对象 25 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 26 由Socket对象得到输出流,并构造PrintWriter对象,并设置为自动刷新 27 PrintWriter out = new PrintWriter(socket.getOutputStream(),true); 28 29 //由于是服务端,所以先获取从客户端传进来的数据 30 int c = 0; 31 String msg = ""; 32 do{ 33 msg = br.readLine(); 34 System.out.println("客户端发送过来的数据为:"+msg); 35 if(msg.equals("bye")){ 36 out.println("bye bye!"); 37 }else{ 38 out.println("continue"); 39 } 40 break; 41 } while ((c=br.read())!=-1); 42 43 socket.close(); 44 } 45 } 46 47 public static void main(String[] args) throws IOException { 48 new SingleServer().service(); 49 } 50 }
接下来是客户端:
1 package org.demo.client; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.io.PrintWriter; 7 import java.net.Socket; 8 import java.net.UnknownHostException; 9 import java.util.Scanner; 10 11 public class SingleClient { 12 public static void main(String[] args) throws UnknownHostException, IOException { 13 Socket socket = null; 14 BufferedReader br = null; 15 PrintWriter out =null; 16 boolean isOk = true; 17 do{ 18 //向本机的8080端口发出客户请求,当然localhost也可以用 19 socket = new Socket("127.0.0.1",8080); 20 //由系统标准输入设备构造BufferedReader对象 21 br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 22 //由Socket对象得到输出流,并构造PrintWriter对象 23 out = new PrintWriter(socket.getOutputStream()); 24 //客户端先写再读 25 System.out.print("请输入想服务端发送的字符:"); 26 //向服务器发送数据 27 out.print(new Scanner(System.in).next()+"\r\n");//一定要记住\r\n表示一行结束,不然服务端会在readLine的时候睡死。。 28 out.flush(); 29 int c = 0; 30 String msg = ""; 31 /** 32 * 第二种获取办法,貌似这种要好点 33 * char[] ch = new char[100]; 34 * in.read(ch,0,ch.length); 35 * String msg= new String(ch); 36 * 37 */ 38 do { 39 //获取从服务器返回的数据 40 msg = br.readLine(); 41 System.out.println(msg); 42 if(msg.equals("bye bye!")){ 43 isOk = false; 44 break; 45 } 46 } while ((c=br.read())!=-1);//这个地方会阻塞,不知道为什么。 47 } while (isOk); 48 out.close(); 49 br.close(); 50 socket.close(); 51 System.exit(0); 52 } 53 }
注释写的不好,有些都是是抄袭,哈哈。
我说下我的观点啊,这个只是Socket原始通信,貌似很少用,我也不知道,看网上大牛说的。但是要想把一个东西学精,就要从头开始,呵呵。
我这种写法肯定有很多不对,求大牛指导。