单对单互发信息聊天 socket 线程 怎么样做到 两个终端之间,可以互相发送消息,同时又可以接受消息? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 单到单直接套接字就可以了,一个做Server,一个做Client,对套接字做读写操作就完成了 A:可以发消息,也可以收消息;B:同样那该怎么做?也是server,client?? 用多线程实现聊天效果,这是以前学习时候练习的,你可以参考下,希望随你有帮助。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(); } }} 谢谢了,你的是UDP的吧我已经做好了,我是使用Tcp 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(); } } }} 这个RSA算法中,公钥加密是咋回事? 请问, JBuilder2005中, 怎么使用匿名内部类监听器 关于类型强转想说的 求个计时器 未按鼠标 却执行鼠标mousePressed()事件 java里面怎么得到文件有多少行?? 关于Java的类方法~疑惑 怎么给窗体添加可视化控件? 有byte[]与int转换的好方法吗? 布局问题! Collection中toArray方法类型转换的问题 我是java初学者,求软件高手帮忙看一下,这段程序哪错了
B:同样
那该怎么做?也是server,client??
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();
}
}
}
我已经做好了,我是使用Tcp
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();
}
}
}
}