转载请注明出处,谢谢: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();
}
}
源:socket读取流。
目的:socket输出流。
都是文本,装饰。
下面是服务端代码:
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