转载请注明出处,谢谢:http://blog.csdn.net/harryweasley/article/details/45665291
最近看了一个教学视频,学习socket编程,里面有一个例子感觉写的不错,我就在此整理一下,帮助我回忆,查看。
需求:文本转换器,
客户端给服务端发送一些字母,服务端会将文本转换成大写返回给客户端。
并且客户端可以无限制的进行文本转换,当客户端输入“over”时,转换结束。
效果图如图所示:
客户端:
服务端:
关于dos窗口,运行java,你可以看这个文章http://blog.csdn.net/harryweasley/article/details/45559129
分析:
客户端:
既然是操作设备上的数据,那么就可以使用io技术,并按照io的操作规律来思考。
源:键盘录入。
目的:网络设备,网络输出流。
而且操作的是文本数据。可以选择字符流。
步骤
1,建立服务。
2,获取键盘录入。
3,将数据发给服务端。
4,获取服务端返回的大写数据。
5,结束,关资源。
都是文本数据,可以使用字符流进行操作,同时提高效率,加入缓冲。
下面是客户端代码:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; public class TransClien { /** * @param args * @throws IOException * @throws UnknownHostException */ public static void main(String[] args) throws Exception { //创建客户端的socket,指定目的主机和端口 Socket s = new Socket("192.168.1.48", 10005); //定义读取键盘数据的流对象。 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); //定义目的,将数据写入到socket输出流。发给服务端。 //BufferedWriter bufOut = //new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); PrintWriter out = new PrintWriter(s.getOutputStream(),true); //定义一个socket读取流,读取服务端返回的大写信息。 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); String line = null; while((line=bufr.readLine())!=null) { if("over".equals(line)) break; out.println(line); // bufOut.write(line); // bufOut.newLine(); // bufOut.flush(); String str =bufIn.readLine(); System.out.println("server:"+str); } bufr.close(); s.close(); } }
下面是服务端代码:
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class TransServer { /** * @param args */ public static void main(String[] args) throws Exception { //建立socket服务,并监听端口 ServerSocket ss = new ServerSocket(10005); Socket s = ss.accept(); String ip = s.getInetAddress().getHostAddress(); System.out.println(ip + "....connected"); // 读取socket读取流中的数据。 BufferedReader bufIn = new BufferedReader(new InputStreamReader( s.getInputStream())); // 目的。socket输出流。将大写数据写入到socket输出流,并发送给客户端。 // BufferedWriter bufOut = // new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); PrintWriter out = new PrintWriter(s.getOutputStream(), true); String line = null; while ((line = bufIn.readLine()) != null) { System.out.println(line); out.println(line.toUpperCase()); // bufOut.write(line.toUpperCase()); // bufOut.newLine(); // bufOut.flush(); } s.close(); ss.close(); } }
注意:客户端和服务端那里注释的4行代码,是利用缓冲流做的,用PrintWriter步骤会少一些,这两种方法都是可以的。
关于udp传输,你可以查看这篇文章http://blog.csdn.net/harryweasley/article/details/45665309
原文地址:http://blog.csdn.net/harryweasley/article/details/45665291