A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 环球信息中心 中级黑马   /  2014-4-18 20:28  /  783 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 环球信息中心 于 2014-4-21 15:41 编辑

向指定ip服务器发送一段数据, 接受的ip会根据数据的类型做出响应。。我这边在接受返回过来的数据..写入缓存,.,该怎么写?

6 个回复

倒序浏览
//建立通道                  
Socket sk = new Socket("指定IP", 端口号);
//建立输出流
DataOutPutStream dos = new DataOutputStream(sk.getOutputStream());
//发送数据
dos.writeUTF("发数据过来!");
//建立输入流
DataInputStream dis = new DataInputStream(sk.getInputStream());
//判断通道没有关闭,并且连接着
if (!sk.isClosed() && sk.isConnected()) {
//读数据
String str=dis.readUTF();
System.out.println(str);
//关闭IO流
dis.close();
dos.close();
//关闭通道
sk.close();
}

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
/**
         * 1.发送
                创建DatagramSocket, 随机端口号
                创建DatagramPacket, 指定数据, 长度, 地址, 端口
                使用DatagramSocket发送DatagramPacket
                关闭DatagramSocket
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
                //String str = "三角恋爱,我喜欢美食,脂肪喜欢我";
                DatagramSocket socket = new DatagramSocket();                                        //创建Socket对象
                Scanner sc = new Scanner(System.in);
                while(true) {
                        String line = sc.nextLine();
                        if(line.equals("quit")) {
                                break;
                        }
                        DatagramPacket packet =                                                                                 //创建packet对象将要发送的数据装在集装箱中
                                        new DatagramPacket(line.getBytes(),line.getBytes().length, InetAddress.getByName("127.0.0.1"), 9999);
                        socket.send(packet);                                                                                        //将数据发送
                }
               
                socket.close();
                sc.close();
        }


发送端   键一个class吧这段代码粘贴进去

点评

注意排版格式  发表于 2014-4-18 22:21

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
/**
         * 2.接收 创建DatagramSocket, 指定端口号 创建DatagramPacket, 指定数组, 长度
         * 使用DatagramSocket接收DatagramPacket 关闭DatagramSocket 从DatagramPacket中获取数据
         *
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
                DatagramSocket socket = new DatagramSocket(9999); // 创建socket对象
                DatagramPacket packet = new DatagramPacket(new byte[1024], 1024); // 创建packet对象,将接收的数据存储在字节数组中

                while (true) {
                        socket.receive(packet);                                                 // 接收数据

                        int len = packet.getLength();                                         // 获取有效的字节个数
                        byte[] arr = packet.getData();                                         // 获取数据
                        String ip = packet.getAddress().getHostAddress();//获取ip地址
                        int port = packet.getPort();                                        //获取端口号
                        System.out.println(ip + ":" + port + ":" +new String(arr, 0, len));         // 将字节数据转换为字符串

                }

        }



接收端!  跟上面一样 要建一个class文件!
回复 使用道具 举报
下面是我写的一个使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。
服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。。
看看能否解答你的疑问。

服务端程序
  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.io.OutputStream;
  4. import java.net.ServerSocket;
  5. import java.net.Socket;


  6. public class Server {

  7.         public static void main(String[] args) throws IOException {
  8.                 // 创建服务器Socket对象
  9.                 ServerSocket ss = new ServerSocket(10000);
  10.                 //接收客户端Socket
  11.                 Socket s = ss.accept();
  12.                 //获取Socket输入流,读取来自客服端的数据
  13.                 InputStream in = s.getInputStream();
  14.                 byte [] buf = new byte[1024];
  15.                 int len = in.read(buf);
  16.                 String str = new String (buf,0,len);
  17.                 System.out.println("从客户端接收到的字符串为:"+str);
  18.                 //创建Socket输出流,向客户端发送数据
  19.                 OutputStream out = s.getOutputStream();
  20.                 out.write(buf);
  21.                 //关闭资源
  22.                 s.close();
  23.                 ss.close();
  24.         }

  25. }
复制代码



客户端程序
  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.io.OutputStream;
  4. import java.net.Socket;
  5. import java.net.UnknownHostException;
  6. import java.util.Scanner;

  7. public class Client {
  8.         public static void main(String[] args) throws UnknownHostException, IOException {
  9.                 //创建Socket客户端
  10.                 Socket s = new Socket("127.0.0.1",10000);
  11.                 //读取键盘输入的数据
  12.                 System.out.println("请输入一个字符串:");
  13.                 Scanner sc = new Scanner(System.in);
  14.                 String str = sc.nextLine();
  15.                 System.out.println("客服端输入的字符串为:"+str);
  16.                 //获取Scocket输出流,写数据,即客户端向服务器写从键盘读到的数据
  17.                 OutputStream out = s.getOutputStream();
  18.                 out.write(str.getBytes());
  19.                 //获取Scocket输入流,读取数据,即客户端读取来自服务器的数据
  20.                 InputStream in = s.getInputStream();
  21.                 byte [] buf = new byte[1024];
  22.                 int len = in.read(buf);
  23.                 String string = new String(buf,0,len);
  24.                 //打印读取到的数据
  25.                 System.out.println("客服端从服务器接收到的数据位:"+string);
  26.                 //关闭Socket
  27.                 s.close();
  28.         }

  29. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
xtxiaolu 发表于 2014-4-18 21:00
/**
         * 1.发送
                创建DatagramSocket, 随机端口号

嗯,谢谢你同行者。都加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马