java---TCP通信 总结

来源:互联网 发布:蓝天准系统知乎 编辑:程序博客网 时间:2024/05/20 06:40

TCP --Socket通信 模式比较固定  --而且代码的模式也比较固定。。。。

代码编写的原则  ---服务器程序和客户端程序要同时编写,便于调试,,在调试的时候要首先运行主机程序,再运行客户端程序


服务器的操作: 读取键盘输入的字符,并打印,抓取客户端传输的字符并打印 如果客户端传输的为bye 则退出

客户端的操作:读取键盘输入的字符,并打印,打印输出服务器传输的字符,如果输入字符为bye则退出

服务器端的代码为

iimport java.io.*;//////包含stream类型 用来传输字符
import java.net.*;/////包含 客户端 套接字等类


public class TalkServer{
public static void main(String[] args){
try{
ServerSocket ss = null;

try{
ss = new ServerSocket(4700); 
}catch(Exception e){
System.out.println("服务套接字创建错误"+e);
}
Socket socket = null;

try{
socket = ss.accept();//阻塞输入
}catch(Exception e){
System.out.println("套接字接受错误"+e);
}
 
  String LineIn = null;
 BufferedReader bfclient = new BufferedReader(new InputStreamReader(socket.getInputStream()));
 
 System.out.println("Accept from the Client"+bfclient.readLine());
 
  BufferedReader rkeyboard = new BufferedReader(new InputStreamReader(System.in));//阻塞输入
 /*BufferedReader 类中有一方法为readLine(),可以读取一行,详细请看API*/ 
 PrintWriter pw = new PrintWriter(socket.getOutputStream());
 /*PrintWriter 中有一方法为 println 打印输出*/
LineIn = rkeyboard.readLine();

while(!LineIn.equals("bye")){

pw.println(LineIn);//向客户端传输输入的字符
pw.flush();
System.out.println("Server:"+LineIn);//打印输入字符
System.out.println("client:"+bfclient.readLine());//打印客户端传输的字符
LineIn = rkeyboard.readLine();///输入时 阻塞 即 当没有输入时 始终等待输入
}

ss.close();
socket.close();
bfclient.close();
rkeyboard.close();
pw.close();
}catch(Exception e)
{
System.out.println("error"+e);
}
}
}

客户端 程序代码为

import java.io.*;
import java.net.*;


public class TalkClient{
public static void main(String[] args){
try{
    Socket s = null;
try{
s = new Socket("192.168.142.98",4700);
}catch(Exception e){
System.out.println("创建错误"+e);
 }
String rdkeyboard = null;
 
PrintWriter pw = new PrintWriter(s.getOutputStream());

BufferedReader bfServer = new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedReader bfkeyboard = new BufferedReader(new InputStreamReader(System.in));
 
 System.out.println("从键盘读取的字符"+bfkeyboard.readLine());
 rdkeyboard = bfkeyboard.readLine();
 
 while(!rdkeyboard.equals("bye"))
 {
  pw.println(rdkeyboard);
  pw.flush(); 
  System.out.println("client"+rdkeyboard);
  System.out.println("Server"+bfServer.readLine());
  rdkeyboard =bfkeyboard.readLine();
 }
 
 s.close();
 bfServer.close();
 bfkeyboard.close();
 pw.close();
 
}catch(Exception e){
System.out.println("erroe"+e);
}
}
}