读书人

java学习札记:TCP通信应用,字符大写转

发布时间: 2012-09-10 22:20:13 作者: rapoo

java学习笔记:TCP通信应用,字符大写转换服务器

先启动服务端

再启动客户端,并输入字符 Student


java学习札记:TCP通信应用,字符大写转换服务器

?


java学习札记:TCP通信应用,字符大写转换服务器
?
?

?

/*TCP通讯  服务端将客户端发来的字符转换成大写返回注意:该例子中出现的问题1.客户端和服务端都出现莫名的等待,字符也无法输入,   因为ip错误,找不到主机   又因为客户端和服务端都有阻塞式方法,这些方法方法没有读取到换行标记,那么就一直等待2.数据没有发送出去,数据写入到缓冲区中没有flush刷出去关于代码的改进:1.BufferedWriter包装的     socket输出流,sock.getOutputStream()  我们可以用PrintWriter类,它可以接受字符流,也可以接受字节流  并且它的println方法,是带换行符的,并且自动刷新缓冲  那么newLine()和flush()方法可以省略了,很方便[示例]:字符大写转换服务端*/import java.net.*;import java.io.*;class Demo{  public static void main(String[] args) throws Exception  {    new TransServer();  }}/*服务端源:socket读取流目的:socket输出流都是文本字符*/class TransServer  //服务端{  TransServer() throws Exception  {     s.op("服务端启动......");    server();  }  public void server() throws Exception  {    ServerSocket serversock = new ServerSocket(10093);    Socket sock = serversock.accept(); //在服务端获取客户端套接字对象        String ip= sock.getInetAddress().getHostAddress();    s.op("来自客户端的IP:"+ip);        //读取socket读取流中的数据    BufferedReader bufrIn = new BufferedReader(new InputStreamReader(sock.getInputStream()));        //目的,socket输出流,将大写数据写入到socket输出流,并发给客户端    BufferedWriter bufwOut = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));    String lineIn =null;    while(true)    {      lineIn = bufrIn.readLine();      if(lineIn!=null)      { s.op("来自客户端的转换请求:"+lineIn);        bufwOut.write(lineIn.toUpperCase());        bufwOut.newLine(); //System.getProperty("line.separator")        bufwOut.flush(); //注意必须的      }      else      {        break;      }    }    sock.close();    serversock.close();  }}class s{  public static void op(Object obj) //打印  {    System.out.println(obj);  }}

?

读书人网 >编程

热点推荐