基于TCP/IP协议下的Socket通信

首先,我用的软件是Netbeans,所以大家可以参考着以下代码,不需要全部复制,因为已经标注解释,希望能帮助大家!

客户端代码:

package javaapplication2;    //这是同步式的方法  
  
import java.net.*;  //jar包  
import java.io.*;   //jar包  
public class Client{   //类名  
    public static void main(String[]args) throws Exception   /**抛出错误*/  {  
        Socket s =new Socket("192.168.0.30",9898);//输入Ip(随着局域网的改变,ip会改变,要输入目前的ip地址),和端口号  
        OutputStream os=s.getOutputStream();     //相当于一个输出管道,客户端必须要有一个接收管道(输入管道)  
        DataOutputStream dos=new DataOutputStream(os);  //输出流  
        //Thread.sleep(5000);  
        dos.writeUTF("1!"); // 读的用dis写的用dos、向服务器发送信息dos.writeUTF("你好!我是1号机器!");  
       DataInputStream dis= new DataInputStream(s.getInputStream()); //输入管道  
         System.out.println("已经连接!");                         //读取服务端发送到响应System.out.println(dis.readUTF());     
        dos.flush();            /**flush() 是清空,而不是刷新啊。 
                                一般主要用在IO中,即清空缓冲区数据, 
                                * 就是说你用读写流的时候,其实数据是先被读到了内存中, 
                                * 然后用数据写到文件中,当你数据读完的时候不代表你的数据已经写完了, 
                                * 因为还有一部分有可能会留在内存这个缓冲区中。 
                                * 这时候如果你调用了 close()方法关闭了读写流, 
                                * 那么这部分数据就会丢失,所以应该在关闭读写流之前先flush(),先清空数据。*/  
        dos.close();       //关闭dos  
        dis.close();       //关闭dis  
        s.close();         //关闭s  
    }  
  
     
    }  
服务端代码:

package javaapplication2;      //这是同步式的方法  
  
import java.net.*;  
import java.io.*;  
public class Server {   //类名  
    public static void main(String[] args) throws Exception/**抛出错误*/{  
       ServerSocket ss=new ServerSocket(6666);     //定义服务器端口  
       System.out.println("服务器已经启动,等待连接....");  
       while(true) {              //循环  
        Socket s = ss.accept();   //等待对方的连接  
        System.out.println("A connent");//客户端连接后输出值  
        DataInputStream dis= new DataInputStream(s.getInputStream());  //接收管道(输入管道)  
        System.out.println(dis.readUTF());         //对应客户端的dos.writeUTF("")  读的用dis写的用dos  
        //Thread.sleep(5000); 同样可以用在服务端,挂起5秒  
         OutputStream os=s.getOutputStream();            //构建输出管道  
         DataOutputStream dos=new DataOutputStream(os);  //输出流  
         dos.writeUTF("欢迎连接!");   //向客户端发送的信息  
        System.out.println("注意先后次序");             //将会在dis.writeUTF("")输出之后“输出”  
        dis.close();                      //关闭dis  
        dos.close();                      //关闭dos  
        s.close();                       //关闭s  
          
  
                 
       }   
    }  
}  
  



  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值