java Socket(一个简单的TCP通信程序)

来源:互联网 发布:如何靠网络挣钱 编辑:程序博客网 时间:2024/05/22 12:58

昨天看了一下,TCP网络设计,虽然之前老师讲过,当时好像没怎么弄,不会,现在感觉这个蛮有意思的,从零开始,一步一步的学习它!

(1)TCP服务器程序如下:

package 网络程序设计;
import java.io.*;
import java.net.*;
public class TCPServer {

public static void main(String[] args) {
// TODO Auto-generated method stub
       String data=null;//存放接受的字符串
       try{
      ServerSocket ss=new ServerSocket(6666); //写个Socket端口“6666”,随便取的,不过要在0~65535之内(1~1032,是署名端口号,不可挪做他用)
      Socket st=ss.accept();  //创建一个倾听的Socket
      System.out.println("Server has connected");
      BufferedReader in=new BufferedReader(new InputStreamReader(st.getInputStream()));//创建一个从Socket中读文本行的流
      PrintWriter out=new PrintWriter(st.getOutputStream(),true);//创建一个向Socket中写文本行的流,自动刷新
      do{
      data=in.readLine();//读取客户机发送的一行文本
      System.out.println("服务端收到的字符串是:"+data);//在屏幕中打印出来
      System.out.println("服务端发回的字符串是:"+data);
      out.println(data);
      out.flush();//清空缓存区
      }while(!data.equals("bye"));//接收到“bye”就结束通信
      out.close();//关闭Socket输出流
      in.close();//关闭Socket输入流
      st.close();//关闭Socket
      ss.close();//关闭SocketServer
       }catch(Exception e){
      System.out.println("Whoops!It didn't work!"+e);
       }
}

}



(2)TCP客户机程序如下:

package 网络程序设计;
import java.io.*;
import java.net.*;
public class TCPClient {
    
public static void main(String[] args) {
// TODO Auto-generated method stub
       String data=null;
       String kdata=null;
       try{
      Socket st=new Socket("192.168.1.106",6666);//向服务器发起连接,本机IP
      PrintWriter out=new PrintWriter(st.getOutputStream(),true);//创建一个向Socket中写文本行的流,自动刷新
      
      BufferedReader in=new BufferedReader(new InputStreamReader(st.getInputStream()));//创建一个从socket中读文本行的流
      BufferedReader kin=new BufferedReader(new InputStreamReader(System.in));//创建一个键盘读文本行的流
      
      do{
      System.out.print("客户端发出的字符串:");
      kdata=kin.readLine();//从键盘中读取一行字符
      out.println(kdata);//向服务器发送过去
      data=in.readLine();//读取服务器的响应
      System.out.println("客户端收到的字符串:"+data);
      out.flush();//清除缓存区
      }while(!kdata.equals("bye"));//发送“bye”就结束通信
      out.close();//关闭Socket输出流
      in.close();//关闭Socket输入流
      st.close();
       }catch(Exception e) {
      System.out.println("Whoops!It didn't work!"+e);
       }
       
}


}

//首先运行TCPServer,再运行TCPServer,在客户端首先发送一条消息“Hello TCPServer!”,再发一条“I'm TCPClient!”,最后发送“bye”,就结束通信。

(3)运行结果如下:

TCPClient:

客户端发出的字符串:Hello TCPServer
客户端收到的字符串:Hello TCPServer
客户端发出的字符串:I'm TCPClient!
客户端收到的字符串:I'm TCPClient!
客户端发出的字符串:bye
客户端收到的字符串:bye


TCPServer:

Server has connected
服务端收到的字符串是:Hello TCPServer
服务端发回的字符串是:Hello TCPServer
服务端收到的字符串是:I'm TCPClient!
服务端发回的字符串是:I'm TCPClient!
服务端收到的字符串是:bye
服务端发回的字符串是:bye

 


1 0