怎么样做到 两个终端之间,可以互相发送消息,同时又可以接受消息?

解决方案 »

  1.   

    单到单直接套接字就可以了,一个做Server,一个做Client,对套接字做读写操作就完成了
      

  2.   

    A:可以发消息,也可以收消息;
    B:同样
    那该怎么做?也是server,client??
      

  3.   

    用多线程实现聊天效果,这是以前学习时候练习的,你可以参考下,希望随你有帮助。
    package com.xinzhanedu;public class mainTest {
    public static void main(String[] args) {
    UDPa ur = new UDPa();
    UDPb us = new UDPb();
    us.start();
    ur.start();
    }
    }//**********************************
    package com.xinzhanedu;import java.net.*;
    import java.util.Scanner;
    import java.io.*;public class UDPa extends Thread{
    public void run(){
    try {
    while(true){
    DatagramSocket ds = new DatagramSocket(7654);
    DatagramPacket dp = new DatagramPacket(new byte[100], 100, InetAddress.getLocalHost(), 1234);
    ds.receive(dp);
    String s = new String (dp.getData(),0,dp.getLength());
    System.out.println("张三:"+s);
    ds.close();
    }

    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    public static void main(String[] args) {
    try {
    while(true){
    DatagramSocket ds1 = new DatagramSocket(2222);
    Scanner input = new Scanner(System.in);
    String s1 = input.next();
    //String s1 = "你好啊,张三!";
    byte[] bs1 = s1.getBytes();
    DatagramPacket dp1 = new DatagramPacket(bs1, bs1.length, InetAddress.getLocalHost(), 3333);
    ds1.send(dp1);
    ds1.close();
    }

    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }}
    //**************************************
    package com.xinzhanedu;import java.io.*;
    import java.net.*;
    import java.util.Scanner;public class UDPb extends Thread {
    public void run() {
    try {
    while(true){
    DatagramSocket ds1 = new DatagramSocket(3333);
    DatagramPacket dp1 = new DatagramPacket(new byte[100], 100, InetAddress.getLocalHost(), 2222);
    ds1.receive(dp1);
    String s1 = new String (dp1.getData(),0,dp1.getLength());
    System.out.println("李四:"+s1);
    ds1.close();
    }
    }catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    public static void main(String[] args) {
    try {
    while(true){
    DatagramSocket ds = new DatagramSocket(1234);
    Scanner input = new Scanner(System.in);
    String s = input.next();
    //String s = "你好啊,李四!";
    byte[] bs = s.getBytes();
    DatagramPacket dp = new DatagramPacket(bs, bs.length, InetAddress.getLocalHost(), 7654);
    ds.send(dp);
    ds.close();
    }
    }catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
      

  4.   

    谢谢了,你的是UDP的吧
    我已经做好了,我是使用Tcp
      

  5.   

    Server端:
    package talkroom;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.net.UnknownHostException;public class Server {
     
    public static void main(String args[] ) throws UnknownHostException, IOException{  ServerSocket serverSocket = new ServerSocket(175);
    System.out.println("bin内置服务已启动,等待另一个人进入"); 
    Socket socket = serverSocket.accept();
            System.out.println("接受到R的请求连接!!");
            Thread rm = new ReceiveMessage(socket);
            rm.start();
           Thread sm = new SendMessage(socket);
        sm.start();
      
            if(!sm.isAlive() && !rm.isAlive()){
            socket.close();
            System.out.println("通话结束!!");
            }
    }
    }
    Client端:
    import java.io.IOException;
    import java.net.Socket;
    import java.net.UnknownHostException;public class User_R {
    public static void main(String args[] ) throws UnknownHostException, IOException, InterruptedException{
        Socket socket = new Socket("127.1.1.0",175);
        if(socket.isConnected()){
         System.out.println("连接成功.");
        }
            Thread rm = new ReceiveMessage(socket);
            rm.start(); 
            Thread sm = new SendMessage(socket);
            sm.start();
        
            if(!sm.isAlive() && !rm.isAlive()){
            socket.close();
            System.out.println("通话结束!!");
            }

    }
    }发送消息线程:
    package talkroom;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.util.Scanner;public class SendMessage extends Thread {
    private Socket socket;
        
    public SendMessage(Socket socket){
    this.socket=socket;
        }

    @SuppressWarnings("static-access")
    @Override
    public void run(){
    while(true){
    try{
    /**PrintWriter pw = new PrintWriter(socket.getOutputStream());;
    BufferedReader br = new BufferedReader(
    new InputStreamReader(System.in));
    String me = br.readLine();
    if(me != null){
    if(me.equals("bye")){
    break;
    }
    pw.write(me);
    System.out.println("我说:"+me);
    pw.flush();
    }*/
    OutputStream os = socket.getOutputStream();
    PrintWriter pw=new PrintWriter(os);
    Scanner sc=new Scanner(System.in);
    String backMess=sc.nextLine();
    pw.println(backMess);
    pw.flush();
    if(backMess.equals("bye"))break;
    }catch(IOException e){
    e.printStackTrace();
    }
    }
    System.out.println("消息发送结束");
    }
    }
    接受消息线程package talkroom;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.Socket;public class ReceiveMessage extends Thread { private Socket socket;
    public ReceiveMessage(Socket socket){
    this.socket=socket;
    }

    @Override
    public void run(){
    String message;
    while(true){
    try {
    System.out.print("1");
    InputStream is = socket.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    message = br.readLine();
    if(null != message){
    System.out.print("对方说:");
    System.out.println(message);
    message = br.readLine();
      }
    if(message.equals("bye"))break;

    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    }