1. java中怎么用ServerSocket做个有窗口的聊天程序哦!
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class MyServer extends JFrame implements ActionListener{
JTextArea jta;
JTextField jtf;
JButton jb;
JPanel jp;
ServerSocket ss;
Socket socket;
//网络输入流
Scanner sc;
//网络输出流
PrintWriter pw;
public MyServer()
{
jta = new JTextArea();
jtf = new JTextField(15);
jb = new JButton("发送");
jp = new JPanel();
jp.add(jtf);
jp.add(jb);
JScrollPane jsp = new JScrollPane(jta);
this.add(jsp,BorderLayout.CENTER);
this.add(jp,BorderLayout.SOUTH);
jb.addActionListener(this);
jtf.addActionListener(this);
//展现
this.setTitle("服务器");
this.setSize(300,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
// 开放端口
try {
ss = new ServerSocket(9000);
System.out.println("等待连接");
socket = ss.accept();
System.out.println("已连接");
//网络输入流
sc = new Scanner(socket.getInputStream());
//网络输出流
pw = new PrintWriter(socket.getOutputStream(),true);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(true)
{
//接受客户端发送数据
String str = sc.nextLine();
//显示多行文本框中
jta.append("客户端说"+str+"\r\n");
}
}
public static void main(String[] args)
{
new MyServer();
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb || e.getSource()==jtf)
{
//向客户端发送数据
pw.println(jtf.getText());
//向多行文本框输入历史聊天记录信息
jta.append("服务器说:"+jtf.getText()+"\r\n");
//清空单行文本框内容
jtf.setText("");
}
}
}
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
//客户端程序
public class MyClient extends JFrame implements ActionListener{
JTextArea jta;
JTextField jtf;
JButton jb;
JPanel jp;
Socket socket;
//网络输入流
Scanner sc;
//网络输出流
PrintWriter pw;
public MyClient()
{
jta = new JTextArea();
jtf = new JTextField(15);
jb = new JButton("发送");
jp = new JPanel();
jp.add(jtf);
jp.add(jb);
JScrollPane jsp = new JScrollPane(jta);
this.add(jsp,BorderLayout.CENTER);
this.add(jp,BorderLayout.SOUTH);
jb.addActionListener(this);
jtf.addActionListener(this);
//展现
this.setTitle("客户端");
this.setSize(300,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
try {
//建立连接
socket = new Socket("127.0.0.1",9000);
//网络输入流
sc = new Scanner(socket.getInputStream());
//网络输出流
pw = new PrintWriter(socket.getOutputStream(),true);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(true)
{
//接受服务器发送数据
String str = sc.nextLine();
//显示在多行文本框
jta.append("服务器说:"+str+"\r\n");
}
}
public static void main(String[] args) {
new MyClient();
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb || e.getSource()==jtf)
{
//向服务器发送数据
pw.println(jtf.getText());
//显示在多行文本框
jta.append("客户端说:"+jtf.getText()+"\r\n");
//清空单行文本框
jtf.setText("");
}
}
}
2. java socket 和php 怎样实现聊天功能,求帮忙
[java]
view
plain
<span
style="font-size:16px;">package
demo.net;
import
java.io.DataInputStream;
import
java.io.DataOutputStream;
import
java.io.IOException;
import
java.net.ServerSocket;
import
java.net.Socket;
import
java.util.Scanner;
/**
*
模拟qq聊天功能:
实现客户端与服务器(一对一)的聊天功能,客户端首先发起聊天,输入的内容在服务器端和客户端显示,
*
然后服务器端也可以输入信息,同样信息也在客户端和服务器端显示
*/
//
服务器类
public
class
ChatServer
{
private
int
port
=
8189;//
默认服务器端口
public
ChatServer()
{
}
//
创建指定端口的服务器
public
ChatServer(int
port)
{
this.port
=
port;
}
//
提供服务
public
void
service()
{
try
{//
建立服务器连接
ServerSocket
server
=
new
ServerSocket(port);
//
等待客户连接
Socket
socket
=
server.accept();
try
{
//
读取客户端传过来信息的DataInputStream
DataInputStream
in
=
new
DataInputStream(socket
.getInputStream());
//
向客户端发送信息的DataOutputStream
DataOutputStream
out
=
new
DataOutputStream(socket
.getOutputStream());
//
获取控制台输入的Scanner
Scanner
scanner
=
new
Scanner(System.in);
while
(true)
{
//
读取来自客户端的信息
String
accpet
=
in.readUTF();
System.out.println(accpet);
String
send
=
scanner.nextLine();
System.out.println("服务器:"
+
send);
//
把服务器端的输入发给客户端
out.writeUTF("服务器:"
+
send);
}
}
finally
{//
建立连接失败的话不会执行socket.close();
socket.close();
}
}
catch
(IOException
e)
{
e.printStackTrace();
}
}
public
static
void
main(String[]
args)
{
new
ChatServer().service();
}
}
</span>
3. 如何用java tcp socket实现聊天室
一个端口就够了。底层实现就是socket的链接。每次server端accept一个链接就会创建一个新的socket用于会话。你可以创建一个类room,包含两个ws,当链接之后,把ws填入到room中。满了就可以开始聊天室。然后server继续等待新的ws
4. 怎样用窗口程序做Java socket编写聊天程序
也不知道怎么说怎么用,我写的代码,很久了,用的是awt,感觉Java在应用程序上没前景所以就没在深入了……现在主攻J2ee,代码给你,你自己感觉吧
服务端:
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatServer {
boolean started = false;
ServerSocket ss = null;
List<Client> clients = new ArrayList<Client>();
public static void main(String[] args) {
new ChatServer().start();
}
public void start() {
try {
ss = new ServerSocket(8888);
started = true;
} catch (BindException e) {
System.out.println("端口使用中....");
System.out.println("请关掉相关程序并重新运行服务器!");
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}
try {
while(started) {
Socket s = ss.accept();
Client c = new Client(s);
System.out.println("a client connected!");
new Thread(c).start();
clients.add(c);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Client implements Runnable {
private Socket s;
private DataInputStream dis = null;
private DataOutputStream dos = null;
private boolean bConnected = false;
public Client(Socket s) {
this.s = s;
try {
dis = new DataInputStream(s.getInputStream());
dos = new DataOutputStream(s.getOutputStream());
bConnected = true;
} catch (IOException e) {
e.printStackTrace();
}
}
public void send(String str) {
try {
dos.writeUTF(str);
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
try {
while(bConnected) {
String str = dis.readUTF();
System.out.println(str);
for(int i=0; i<clients.size(); i++) {
Client c = clients.get(i);
c.send(str);
}
}
} catch (EOFException e) {
System.out.println("Client closed!");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(dis != null) dis.close();
if(dos != null) dos.close();
if(s != null) {
s.close();
//s = null;
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
}
客户端,开两个就能聊了……
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class ChatClient extends Frame {
Socket s = null;
DataOutputStream dos = null;
DataInputStream dis = null;
private boolean bConnected = false;
TextField tfTxt = new TextField();
TextArea taContent = new TextArea();
Thread tRecv = new Thread(new RecvThread());
public static void main(String[] args) {
new ChatClient().launchFrame();
}
public void launchFrame() {
setLocation(400, 300);
this.setSize(300, 300);
add(tfTxt, BorderLayout.SOUTH);
add(taContent, BorderLayout.NORTH);
pack();
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent arg0) {
disconnect();
System.exit(0);
}
});
tfTxt.addActionListener(new TFListener());
setVisible(true);
connect();
tRecv.start();
}
public void connect() {
try {
s = new Socket("127.0.0.1", 8888);
dos = new DataOutputStream(s.getOutputStream());
dis = new DataInputStream(s.getInputStream());
System.out.println("connected!");
bConnected = true;
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void disconnect() {
try {
dos.close();
dis.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private class TFListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String str = tfTxt.getText().trim();
tfTxt.setText("");
try {
dos.writeUTF(str);
dos.flush();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
private class RecvThread implements Runnable {
public void run() {
try {
while(bConnected) {
String str = dis.readUTF();
taContent.setText(taContent.getText() + str + '\n');
}
} catch (SocketException e) {
System.out.println("�˳��ˣ�bye!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
5. 用java的Socket编写的小小小聊天工具,在本机调试成功,但是在两台能互相ping通的电脑却不能连接上
建议先用一个最简单的程序测试客户端链接服务器,这样可以排除很多干扰,下面两个类已经是客户端和服务器的最简代码了,你先测一下,如果仍不能连接,把异常信息发上来看看。
另:Socket连接容易出问题的地方:
1)端口号冲突,服务器无法启动;
2)IP地址错误,IP地址分本机地址、局域网地址和广域网地址,在不同的环境下使用不同的地址测试,如果错误将无法被客户端访问,还有如果机器安装了多网卡等问题都会引起错误;
3)防火墙禁止Java程序开放端口,不单是服务器机器的软防火墙,局域网的防火墙也可能阻止外部的访问。
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerMain {
public ServerMain() {
try {
ServerSocket ss = new ServerSocket(31647);
Socket s = ss.accept();
System.out.printf("客户端连接成功:\n%s\n", s.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ServerMain();
}
}
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientMain {
public ClientMain() {
try {
Socket s = new Socket("192.168.1.100", 31647); // 修改IP地址
System.out.println("连接服务器成功!");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ClientMain();
}
}
6. 急!!!!求JAVA 帝!JAVA socket 编程,实现聊天程序或其他功能
//这是一个批量文件传输程序,先运行server,然后运行client。即可将client端的e:\\1文件内的所有内容传输给server端,并按照原来的文件夹结构放在server端电脑的e:\\2文件夹内
/*
* MyClient.java
*
* Created on 2009年8月16日, 下午1:37
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
import java.io.*;
import java.net.*;
public class MyClient
{
Socket client;
boolean flag=true;
FileInputStream fis;//此输入流负责读取本机上要传输的文件
DataOutputStream dos;//此输出流负责向另一台电脑(服务器端)传输数据
DataInputStream dis;//此输入流负责读取另一台电脑的回应信息
public static void main(String[] args)
{
new MyClient().ClientStart();
}
public void ClientStart()
{
try
{
client=new Socket("192.168.2.101",30000);//服务器端的IP,(这个只是在局域网内的)我的是这个,你的根据实际而定
//client=new Socket("localhost",30000);
System.out.println("已连接");
dos=new DataOutputStream(client.getOutputStream());
dis=new DataInputStream(client.getInputStream());
transmit(new File("e:\\1\\"));
String s="/]00";//提示传输完毕的标记
byte b[]=s.getBytes();
dos.write(b,0,s.length());
dos.flush();
}
catch(IOException e)
{
System.out.println("Error");
}
}
public void transmit(File f)throws IOException//这是传输的核心,而且将被递归
{
byte b[];
String ts;
int ti;
for(File f1:f.listFiles())
{ //首先通过if语句判断f1是文件还是文件夹
if(f1.isDirectory()) //fi是文件夹,则向服务器端传送一条信息
{
ts="/]0f"+(f1.getPath().replace("e:\\1\\",""));//"/]0f"用于表示这条信息的内容是文件夹名称
b=ts.getBytes();
dos.write(b);
dos.flush();
dis.read();
transmit(f1);//由于f1是文件夹(即目录),所以它里面很有可能还有文件或者文件夹,所以进行递归
}
else
{
fis=new FileInputStream(f1);
ts="/]0c"+(f1.getPath().replace("e:\\1\\",""));//同上,表示这是一个文件的名称
b=ts.getBytes();
dos.write(b);
dos.flush();
dis.read();
dos.writeInt(fis.available());//传输一个整型值,指明将要传输的文件的大小
dos.flush();
dis.read();
b=new byte[10000];
while(fis.available()>0)//开始传送文件
{
ti=fis.read(b);
dos.write(b,0,ti);
dos.flush();
}
dos.flush();
fis.close();
dis.read();
}
}
}
}
/*
* MyServer.java
*
* Created on 2009年8月16日, 上午11:44
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
/**
*
* @author Administrator
*/
import java.io.*;
import java.net.*;
public class MyServer
{
ServerSocket server=null;
Socket client=null;
boolean flag=true;
DataInputStream dis;
DataOutputStream dos;
FileOutputStream fos;
public static void main(String[] args)
{
new MyServer().ServerStart();
}
public void ServerStart()
{
try
{
server=new ServerSocket(30000);
System.out.println("端口号:"+server.getLocalPort());
client=server.accept();
System.out.println("连接完毕");
dis=new DataInputStream(client.getInputStream());
dos=new DataOutputStream(client.getOutputStream());
String answer="g";
byte ans[]=answer.getBytes();
byte b[]=new byte[1000];
int ti;
new File("e:\\2").mkdirs();
while(flag)
{
ti=dis.read(b);
dos.write(ans);
String select=new String(b,0,ti);
if(select.contains("/]0f"))
{
File f=new File("e:\\2\\"+(select.replace("/]0f","")));
System.out.println("creat directory");
f.mkdirs();
}
else if(select.contains("/]0c"))
{
fos=new FileOutputStream("e:\\2\\"+(select.replace("/]0c","")));
String cs;
boolean cflag=true;
int tip=dis.readInt();
dos.write(ans);
while(tip>0)
{
ti=dis.read(b,0,(tip>1000?1000:tip));
tip=tip-ti;
cs=new String(b,0,4);
fos.write(b,0,ti);
}
fos.flush();
fos.close();
dos.write(ans);
}
else if(select.contains("/]00"))
{
flag=false;
}
}
dis.close();
client.close();
server.close();
}
catch(IOException e)
{
System.out.println("Error");
}
}
}
7. 基于java socket编程实现多用户的聊天问题
你只实现了单工聊天功能, 并没有实现双工聊天功能。 也就是说,服务器端 没有实现 客户端A和客户端B的通信 。 你会mv模式吧, 在model功能层里开一个线程 并用 s.accept()接受从客户端 发来的套接字,然后转给另一个客户端,如果这条路打通了 你就可以 实现双工通信, 不是很难的 ,细心点 试试看。
8. 怎么用java socket编程实现聊天
如果你要代码,可以Q我768446359,如果其中有不懂(是思路上的,不是那种控制台错误,当然控制台错误也可以)问我,只是我只能保证思路方面解释清楚,如果我写的代码在你的电脑出现其他我没遇到的问题,我可能没时间去想!还有,我的是单服务器,多客户端,客户端直接相互可以聊天,不知道是不是你想要的?
。。。 ------最后,希望采纳!毕竟我们纯手打!
9. Java Socket编程我写了个简单聊天程序 没有用线程 发送在窗口输出流 为什么不能发送消息 难道这样做不行
空指针,你用debug模式跟踪一下,你的某个对象的值是null,然后你就用丫的方法了。我怀疑是这个:if(arg0.getSource()==button_1){
你都没判断arg0是不是null啊,直接就用方法。
10. 怎么写个java socket 程序,能相互聊天
代码那可长啦 我给你发一个吧 udp协议做的 我找找
public void sendMessage() {
//ipjh是一个ip集合 是一个list对象
for(int k=0;k<ipjh.size();k++){
String msg = tfMsg.getText().trim();
if("".equals(address)) {
JOptionPane.showMessageDialog(this, "请输入发送地址!");
//tfAddress.requestFocus();
return;
}
if("".equals(msg)) {
JOptionPane.showMessageDialog(this, "请输入消息!");
//tfAddress.requestFocus();
return;
}
try {
//构造数据报
InetAddress toAddr = InetAddress.getByName(ipjh.get(k));
String shuju = yhm+"说:"+msg.toString();
byte[] pData = shuju.getBytes();
DatagramPacket packet = new DatagramPacket(pData,pData.length,toAddr,3000);
//发送数据报
new DatagramSocket().send(packet);
} catch (Exception e) {
//e.printStackTrace();
JOptionPane.showMessageDialog(this, "消息发送失败,原因:" + e.getMessage());
}
}
}