我就是不明白我的程序为啥无法达到聊天的效果,客户端发过去的信息服务器端无法接受,为什么?
Server端:
import java.net.*;
import java.io.*;class ChatServer
{
public static void main(String[] agrs)
{
ServerSocket ss=null;
Socket s=null;
InputStream is=null;
BufferedReader br1=null;
BufferedReader br2=null;
OutputStreamWriter osw=null;
BufferedWriter bw=null;
InputStreamReader is1=null;
try
{
ss=new ServerSocket(2222);
while(true)
{
System.out.println("Client:");
s=ss.accept();
is=s.getInputStream();
is1=new InputStreamReader(is);
br1=new BufferedReader(is1);
System.out.print(br1.readLine());
System.out.print("Server:");
br2=new BufferedReader(new InputStreamReader(System.in));
String c=br2.readLine();
osw=new OutputStreamWriter(s.getOutputStream());
bw=new BufferedWriter(osw);
bw.write(c,0,c.length());
bw.flush();
}
}
catch(IOException ioe)
{
System.out.println(ioe.getMessage());
}
}
}Client端:
import java.net.*;
import java.io.*;class ChatClient
{
public static void main(String[] args)
{
String c;
Socket s=null;
BufferedReader br1=null;
OutputStream os=null;
OutputStreamWriter osw=null;
BufferedReader br2=null;
BufferedWriter br3=null;
try
{
while(true)
{
s=new Socket("127.0.0.1",2222);
System.out.print("Client:");
br1=new BufferedReader(new InputStreamReader(System.in));
c=br1.readLine();
os=s.getOutputStream();
osw=new OutputStreamWriter(os);
br3=new BufferedWriter(osw);
br3.write(c,0,c.length());
br3.flush();
System.out.print("Server:");
br2=new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println(br2.readLine());
}
}
catch(IOException ioe)
{
System.out.println(ioe.getMessage());
}
}
}
Server端:
import java.net.*;
import java.io.*;class ChatServer
{
public static void main(String[] agrs)
{
ServerSocket ss=null;
Socket s=null;
InputStream is=null;
BufferedReader br1=null;
BufferedReader br2=null;
OutputStreamWriter osw=null;
BufferedWriter bw=null;
InputStreamReader is1=null;
try
{
ss=new ServerSocket(2222);
while(true)
{
System.out.println("Client:");
s=ss.accept();
is=s.getInputStream();
is1=new InputStreamReader(is);
br1=new BufferedReader(is1);
System.out.print(br1.readLine());
System.out.print("Server:");
br2=new BufferedReader(new InputStreamReader(System.in));
String c=br2.readLine();
osw=new OutputStreamWriter(s.getOutputStream());
bw=new BufferedWriter(osw);
bw.write(c,0,c.length());
bw.flush();
}
}
catch(IOException ioe)
{
System.out.println(ioe.getMessage());
}
}
}Client端:
import java.net.*;
import java.io.*;class ChatClient
{
public static void main(String[] args)
{
String c;
Socket s=null;
BufferedReader br1=null;
OutputStream os=null;
OutputStreamWriter osw=null;
BufferedReader br2=null;
BufferedWriter br3=null;
try
{
while(true)
{
s=new Socket("127.0.0.1",2222);
System.out.print("Client:");
br1=new BufferedReader(new InputStreamReader(System.in));
c=br1.readLine();
os=s.getOutputStream();
osw=new OutputStreamWriter(os);
br3=new BufferedWriter(osw);
br3.write(c,0,c.length());
br3.flush();
System.out.print("Server:");
br2=new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println(br2.readLine());
}
}
catch(IOException ioe)
{
System.out.println(ioe.getMessage());
}
}
}
ChatApp.java文件package chat2;import java.net.*;
import java.io.*;
import javax.swing.UIManager;
import java.awt.*;
public class ChatApp {
boolean packFrame = false; public ChatApp() {
ChatFrame frame = new ChatFrame();
if (packFrame) {
frame.pack();
}
else {
frame.validate();
}
//放置窗体在屏幕中央
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
frame.setVisible(true);
frame.waitforpackets();
} public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e) {
e.printStackTrace();
}
new ChatApp();
}
}
ChatFrame.java文件package chat2;import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;public class ChatFrame extends JFrame {
JPanel contentPane;
Label label1 = new Label();//发送消息
Label label2 = new Label();//输入ip
Label label3 = new Label();//输入端口标签
Label label4 = new Label();//输出端口标签
TextField textField1 = new TextField();//输入ip
TextField textField2 = new TextField();//发送消息
TextField textField3 = new TextField();//获得输入端口
TextField textField4 = new TextField();//获得输出端口
Button button1 = new Button();//发送消息
Button button2 = new Button();//建立连接
TextArea textArea1 = new TextArea(); boolean online = false;
int portIn = 5000;//输入端口
int portOut = 5001;//输出端口 DatagramPacket sendpacket,receivepacket;//声明发送和接收数据包
DatagramSocket sendsocket,receivesocket;//声明发送和接收DatagramSocket
public ChatFrame() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
toInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void toInit() throws Exception {
contentPane = (JPanel) this.getContentPane();
label1.setText("发送信息:");
label1.setBounds(new Rectangle(13, 100, 60, 21));
contentPane.setLayout(null);
this.setSize(new Dimension(363, 320));
this.setTitle("二人聊天室");
label2.setText("输入对方IP地址:");
label2.setBounds(new Rectangle(12, 19, 109, 23));
label3.setText("输入端口:");
label3.setBounds(new Rectangle(12,58,55,22));
label4.setText("输出端口:");
label4.setBounds(new Rectangle(180,58,55,22));
textField3.setText("5000");
textField4.setText("5001");
textField2.setText("210.77.26.60"); button1.setLabel("发送");
button1.setBounds(new Rectangle(280, 100, 59, 21));
button1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button1_actionPerformed(e);
}
});
button2.setLabel("连接");
button2.setBounds(new Rectangle(280, 20, 59, 21));
button2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button2_actionPerformed(e);
}
}); textField4.setBounds(new Rectangle(240,58,90,22));
textField3.setBounds(new Rectangle(70,58,90,22));
textField2.setBounds(new Rectangle(123, 20, 120, 19));
textField1.setBounds(new Rectangle(76, 100, 190, 19));
textArea1.setBounds(new Rectangle(11, 140, 333, 134));
textArea1.setEditable(false);
contentPane.add(label4, null);
contentPane.add(label3, null);
contentPane.add(label2, null);
contentPane.add(label1, null);
contentPane.add(textField1, null);
contentPane.add(textField2, null);
contentPane.add(textField3, null);
contentPane.add(textField4, null);
contentPane.add(textArea1, null);
contentPane.add(button1, null);
contentPane.add(button2,null);
try {
sendsocket=new DatagramSocket(5001);//实例化DatagramSocket类作为输出端
receivesocket=new DatagramSocket(5000);//实例化DatagramSocket类作为输入端
online = !(sendsocket.isClosed());
}
catch(SocketException se){//异常捕获
se.printStackTrace() ;
System.exit(0);
}
}
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
public void waitforpackets(){//检测并接受对方发来的消息
while(true){
try{
byte[]array=new byte[100];
receivepacket=new DatagramPacket(array,array.length );
receivesocket.receive(receivepacket);//接收
textArea1.append("\nfrom "+receivepacket.getAddress() +":"+receivepacket.getPort()+" get:");
byte data[]=receivepacket.getData() ;
String received=new String(data,0);
textArea1.append(received);
}
catch (IOException se){
se.printStackTrace() ;
}
}
}
void button2_actionPerformed(ActionEvent e){//和对方建立连接
String str2 = new String();
String str3 = new String();
str2 = textField3.getText();
str3 = textField4.getText();
if(str2.compareTo("")!=0&&str3.compareTo("")!=0){
portIn = (int) Integer.parseInt(str2);
portOut = (int) Integer.parseInt(str3);
if(online){
sendsocket.close();
receivesocket.close();
textArea1.append("\n formal connection closed");
}
try {
textArea1.append("\n building a connection use the port defined...");
sendsocket=new DatagramSocket(portOut);
receivesocket=new DatagramSocket(portIn);
textArea1.append("\n connection builded.");
}
catch(SocketException se){
se.printStackTrace() ;
System.exit(0);
}
online = !(sendsocket.isClosed());
}
else
textArea1.append("\nplease input ports and IP");
}
void button1_actionPerformed(ActionEvent e) {//发送消息到对方
String str=textField2.getText();
if(online){
if(str.compareTo("")!=0 ){
try {
textArea1.append("\nto "+textField2.getText() +":"+portOut+" say: "+textField1.getText() );
String s=textField1.getText() ;
byte data[]=new byte[100];
s.getBytes(0,s.length() ,data,0);
sendpacket=new DatagramPacket(data,s.length() ,InetAddress.getByName(textField2.getText()),portOut);
sendsocket.send(sendpacket);
}
catch(IOException exc){
exc.printStackTrace() ;
}
}
}
else textArea1.append("\nplease build a connection first!");
}
}
public static void main(String[] args)
throws Exception{
Socket so = new Socket("127.0.0.1",8899);
DataInputStream dis = new
DataInputStream(so.getInputStream());
DataOutputStream dos = new
DataOutputStream(so.getOutputStream());
Scanner sc = new Scanner(System.in);
while(true){
String temp = sc.next();
dos.writeUTF(temp);
if("bye".equals(temp)) break;
System.out.println(dis.readUTF());
}
dis.close();dos.close();
so.close();
}
}
直接拿到全部内容,一次性写完输出...下面我只是简单的改了下代码,使得服务器能接收信息从客户端..
其中肯定是可以运行的.但是会出现些问题还有待LZ去解决,import java.net.*;
import java.io.*; class ChatServer
{
public static void main(String[] agrs)
{
ServerSocket ss=null;
Socket s=null;
InputStream is=null;
BufferedReader br1=null;
BufferedReader br2=null;
OutputStreamWriter osw=null;
BufferedWriter bw=null;
InputStreamReader is1=null;
try
{
ss=new ServerSocket(2222);
while(true)
{
System.out.println("Server:");
s=ss.accept();
System.out.println("------------------have a Client has connected!----------------------");
is=s.getInputStream();
DataInputStream dis = new DataInputStream(s.getInputStream());
String str = dis.readUTF();
System.out.println(str);
dis.close();
}
}
catch(IOException ioe)
{
System.out.println(ioe.getMessage());
}
}
} import java.net.*;
import java.io.*; class ChatClient
{
public static void main(String[] args)
{
String c; Socket s=null;
BufferedReader br1=null;
OutputStream os=null;
OutputStreamWriter osw=null;
BufferedReader br2=null;
BufferedWriter br3=null;
try
{ while(true)
{
s=new Socket("127.0.0.1",2222);
System.out.print("Client:");
String mess ="text";
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
dos.writeUTF(mess);
dos.flush();
dos.close();
}
}
catch(IOException ioe)
{
System.out.println(ioe.getMessage());
}
}
}
System.out.print("Client:");
br1=new BufferedReader(new InputStreamReader(s.getInputStream());
c=br1.readLine();
os=s.getOutputStream();
osw=new OutputStreamWriter(os);
br3=new BufferedWriter(osw);
br3.write(c,0,c.length());
br3.flush();
System.out.println(br3.readLine()); 这样应该可以了吧