- 浏览: 117937 次
- 性别:
- 来自: 广州
最新评论
服务器端的源代码是:
/*
*
* @(#)Chat_Server.java
*
*
* @author
* @version 1.00 2009/4/2
*/
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Enumeration;
import java.util.Vector;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
public class Chat_Server extends JPanel
{
private JPanel topPanel = new JPanel();
private JPanel buttonPanel = new JPanel();
private DefaultTableModel defaultModel;
private JTable nameTable;
private JButton exitButton;
private JList list;
private DefaultListModel listModel;
private JButton sendButton = new JButton("发送(S)");
private JTextField sayWord =new JTextField();
private Vector totalThread = new Vector(); //totalThread将所有连接保存在其中,当需要时从中取出
private int port = 8082;
public Chat_Server()
{
this.setLayout(new GridLayout(2,1));
}
public void init()
{
String[]columName = new String[] {"用户名称","IP"
};
String[][] tempData = new String[][] {{"",""
}};
defaultModel = new DefaultTableModel(tempData,columName); //这一段....
nameTable =new JTable(defaultModel);
nameTable.setRowHeight(22);
exitButton =new JButton("关闭服务器(C)");
exitButton.addActionListener(new ActionListener(){ //
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
topPanel.setLayout(new BorderLayout());
topPanel.add(new JLabel("在线用户",JLabel.LEFT),BorderLayout.NORTH);
topPanel.add(new JScrollPane(nameTable),BorderLayout.CENTER);
listModel = new DefaultListModel();
list = new JList(listModel);
JPanel temp =new JPanel(new BorderLayout());
temp.add(sayWord,BorderLayout.CENTER);
sendButton.addActionListener(new ActionListener(){ //按发送键 发送信息
public void actionPerformed(ActionEvent arg0){
sendData();
}
});
sendButton.setMnemonic('s'); //设置快捷键 ALT + S 发送 sendButton
//sendButton.setMnemonic(java.awt.event.KeyEvent.VK_ENTER); //设置快捷键 CTRL + ENTER 发送 sendButton 不行
temp.add(sendButton,BorderLayout.EAST);
JPanel temp2 = new JPanel();
exitButton.setMnemonic('c'); //设置快捷键 ALT + C 关闭服务器 exitButton
temp2.add(exitButton);
temp.add(temp2,BorderLayout.SOUTH);
buttonPanel.setLayout(new BorderLayout());
buttonPanel.add(new JScrollPane(list),BorderLayout.CENTER);
buttonPanel.add(temp,BorderLayout.SOUTH);
this.add(topPanel);
this.add(buttonPanel);
new StartServer().start();
new UpdateThread().start(); //两进程
}
class StartServer extends Thread
{
public void run()
{
try
{
ServerSocket serverSocket = new ServerSocket(port);
while(true)
{
try
{
Socket s = serverSocket.accept();
AcceptThread acceptThread = new AcceptThread(s);
acceptThread.start();
totalThread.add(acceptThread);
}catch(IOException ex2)
{
throw ex2;
}
}
}catch(IOException e){
e.printStackTrace();
}
}
}
private void addWord(String word)
{
listModel.add(0,word);
}
private void sendData() //sendData()用于将服务器发言发送给每一个客户端,具体发送由sendWordToEveryone完成
{
String temp = "xinye说: "+sayWord.getText().trim();
sendWordToEveryone(temp.getBytes());
addWord(temp);
sayWord.setText(""); //.....................................................重新设置为空.
}
class UpdateThread extends Thread
{
public void run()
{
while(true)
{
String[] columName = new String[]{
"用户名称","IP"
};
String[][] tempData = new String[][] {
};
defaultModel = new DefaultTableModel(tempData,columName);
AcceptThread tempThread = null;
Object tempObject = null; //这是什么 tempObject ?
Enumeration enum1 = totalThread.elements(); //
while(enum1.hasMoreElements())
{
tempObject = enum1.nextElement();
if(tempObject !=null)
{
tempThread = (AcceptThread)tempObject;
if(tempThread.isAlive())
defaultModel.addRow(new String[]{
tempThread.getUserName(),
tempThread.getUserIP()
});
else
tempObject= null;
}
nameTable.setModel(defaultModel);//创建了新的DefaultTableModel ,调用JTable的setModel方法后,JTable将显示
//这个DefaultTableModel的内容
}
try
{
sleep(6000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
public static void main(String[] args)
{
JFrame mf = new JFrame("服务端");
Chat_Server server = new Chat_Server();
mf.getContentPane().add(server);
mf.setLocation(150,0);
mf.setSize(300,400);
mf.setDefaultCloseOperation(mf.EXIT_ON_CLOSE);
server.init(); //
mf.setVisible(true);
}
class AcceptThread extends Thread //serverSocket为每一个客户请求都会生成一个新的AcceptThread线程
{
Socket s = null;
InputStream inputStream = null;
OutputStream outputStream = null;
String name= "此处为昵称";
String ip;
boolean flag = true;
BufferedInputStream bis;
BufferedOutputStream bos;
byte[] bytes;
public AcceptThread(Socket s)
{
this.s = s;
ip = s.getInetAddress().getHostAddress(); //要获取客户端地址,这里应该写错了
System.out.println(ip);
try
{
inputStream = s.getInputStream();
outputStream = s.getOutputStream();
bos = new BufferedOutputStream(outputStream,1024);
}catch(IOException e)
{
e.printStackTrace();
if(s!=null)
{
try{
s.close();
}catch(IOException e1){
e1.printStackTrace();
}
}
flag = false;
}
}
public void run()
{
bis = new BufferedInputStream(inputStream,1024);
while(flag)
{
try
{
bytes = new byte[1024];
bis.read(bytes);
String tempS= new String(bytes);
tempS = tempS.trim();
name = tempS.substring(0,tempS.indexOf("说")); //subString or substring
addWord(tempS); //查 addWord
sendWordToEveryone(bytes);
}catch(IOException e)
{
e.printStackTrace();
flag = false;
}
}
}
public void sendWord(byte[] bytes) //AcceptThread用sendWord来向和自己建立专线连接的客户发送数据
{
try
{
bos.write(bytes);
bos.flush();
}catch(IOException e){
e.printStackTrace();
}
}
public String getUserName() //用于返回当前客户端的名称
{
return name;
}
public String getUserIP()
{
return ip;
}
}
private void sendWordToEveryone(byte[] bytes) //sendwordToEveryone从totalThread中提取每一个AcceptThead并向活动的线程发送数据
{
Enumeration enum1 = totalThread.elements();
while(enum1.hasMoreElements())
{
Object tempObject = enum1.nextElement();
if(tempObject != null)
{
AcceptThread tempThread = (AcceptThread)tempObject;
if(tempThread.isAlive())
{
tempThread.sendWord(bytes);
}
}
}
}
}
客户端的代码是:
/**
* @(#)Chat_Client.java
*
*
* @author
* @version 1.00 2009/4/1
*/
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.*;
import java.awt.event.*;
//以上界面相关
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException; //以上通信相关
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import java.lang.InterruptedException; //
public class Chat_Client extends JPanel{
private InputStream inputStream;
private OutputStream outputStream;
private JTextField sayText = new JTextField();
private Socket s;
private DefaultListModel listModel = new DefaultListModel(); //DefaultListModel vs JList
private JList list = new JList(listModel);
private JTextField nameText = new JTextField(10);
private BufferedOutputStream bos;
private JButton sendButton = new JButton("发送(S)");
private String host ="";
private JTextField hostIP = new JTextField(15);
private int port = 8082;
public void init()
{
nameText.setText("此处昵称");
setLayout(new BorderLayout());
add(this.getContextPane(),BorderLayout.CENTER);
add(this.getButtonPanel(),BorderLayout.SOUTH);
//this.startClient(host,port);
}
public static void main(String[] args)
{
JFrame frame = new JFrame("客户端");
frame.setSize(300,400);
frame.setLocation(150,100);
Chat_Client chatClient = new Chat_Client();
chatClient.init();
frame.getContentPane().add(chatClient);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private boolean flag = true;
//startClient与服务器建立连接并获取输入输出流
private void startClient(String host,int port)
{
try
{
host = hostIP.getText();
s = new Socket(InetAddress.getByName(host),port);
inputStream = s.getInputStream();
outputStream = s.getOutputStream();
bos = new BufferedOutputStream(outputStream,1024);
System.out.println(bos);
new ResevWord(inputStream).start();
}catch(UnknownHostException e)
{
e.printStackTrace();
}catch(IOException e)
{
e.printStackTrace();
flag = false;
}
}
//sendData将数据发往服务器
private void sendData()
{
String word = nameText.getText()+"说: "+sayText.getText();
try
{
bos.write(word.getBytes());
bos.flush();
}catch(IOException e)
{
e.printStackTrace();
}
sayText.setText(""); //重新设为空
}
class ResevWord extends Thread //ReseWord可用于创建新的线程,用于接收数据
{
InputStream ips = null;
BufferedInputStream bis =null;
byte[] bytes = new byte[1024];
public ResevWord(InputStream ips)
{
this.ips = ips;
bis = new BufferedInputStream(ips,1024);
}
public void run()
{
while(flag) //循环,多个客户端?
{
try{
try{
bis.read(bytes);
String word =new String(bytes);
word = word.trim();
listModel.add(0,word); //在此列表的指定位置处插入指定元素
}catch(IOException ex){
ex.printStackTrace();
flag = false;
}
}catch(Exception ee){
ee.printStackTrace();
}
}
}
}
private JPanel getContextPane()
{
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
JPanel p1 = new JPanel();
p1.setLayout(new BorderLayout());
JPanel p11 = new JPanel();
//p11.setLayout(new BorderLayout());
JLabel j1 = new JLabel("我是");
p11.add(j1);
p11.add(nameText);
JPanel p12 = new JPanel();
JLabel j2 = new JLabel("服务器IP");
p12.add(j2);
p12.add(hostIP);
JPanel p13 = new JPanel();
JButton connectServer = new JButton("连接服务器");
connectServer.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
startClient(host,8082);
}
});
p13.add(connectServer);
p1.add(p11,BorderLayout.NORTH);
p1.add(p12,BorderLayout.CENTER);
p1.add(p13,BorderLayout.SOUTH);
panel.add(p1,BorderLayout.NORTH);
panel.add(new JScrollPane(list),BorderLayout.CENTER); //有个list
return panel;
}
private JPanel getButtonPanel()
{
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(sayText,BorderLayout.CENTER);
sendButton.setMnemonic('s'); //快捷键 ALT + S sendButton 发送
sendButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
sendData();
}
});
panel.add(sendButton,BorderLayout.EAST);
return panel;
}
}
本文代码来自:http://topic.csdn.net/u/20090404/01/2f349eb7-26b5-49ae-8955-78cc74bfd545.html
/*
*
* @(#)Chat_Server.java
*
*
* @author
* @version 1.00 2009/4/2
*/
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Enumeration;
import java.util.Vector;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
public class Chat_Server extends JPanel
{
private JPanel topPanel = new JPanel();
private JPanel buttonPanel = new JPanel();
private DefaultTableModel defaultModel;
private JTable nameTable;
private JButton exitButton;
private JList list;
private DefaultListModel listModel;
private JButton sendButton = new JButton("发送(S)");
private JTextField sayWord =new JTextField();
private Vector totalThread = new Vector(); //totalThread将所有连接保存在其中,当需要时从中取出
private int port = 8082;
public Chat_Server()
{
this.setLayout(new GridLayout(2,1));
}
public void init()
{
String[]columName = new String[] {"用户名称","IP"
};
String[][] tempData = new String[][] {{"",""
}};
defaultModel = new DefaultTableModel(tempData,columName); //这一段....
nameTable =new JTable(defaultModel);
nameTable.setRowHeight(22);
exitButton =new JButton("关闭服务器(C)");
exitButton.addActionListener(new ActionListener(){ //
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
topPanel.setLayout(new BorderLayout());
topPanel.add(new JLabel("在线用户",JLabel.LEFT),BorderLayout.NORTH);
topPanel.add(new JScrollPane(nameTable),BorderLayout.CENTER);
listModel = new DefaultListModel();
list = new JList(listModel);
JPanel temp =new JPanel(new BorderLayout());
temp.add(sayWord,BorderLayout.CENTER);
sendButton.addActionListener(new ActionListener(){ //按发送键 发送信息
public void actionPerformed(ActionEvent arg0){
sendData();
}
});
sendButton.setMnemonic('s'); //设置快捷键 ALT + S 发送 sendButton
//sendButton.setMnemonic(java.awt.event.KeyEvent.VK_ENTER); //设置快捷键 CTRL + ENTER 发送 sendButton 不行
temp.add(sendButton,BorderLayout.EAST);
JPanel temp2 = new JPanel();
exitButton.setMnemonic('c'); //设置快捷键 ALT + C 关闭服务器 exitButton
temp2.add(exitButton);
temp.add(temp2,BorderLayout.SOUTH);
buttonPanel.setLayout(new BorderLayout());
buttonPanel.add(new JScrollPane(list),BorderLayout.CENTER);
buttonPanel.add(temp,BorderLayout.SOUTH);
this.add(topPanel);
this.add(buttonPanel);
new StartServer().start();
new UpdateThread().start(); //两进程
}
class StartServer extends Thread
{
public void run()
{
try
{
ServerSocket serverSocket = new ServerSocket(port);
while(true)
{
try
{
Socket s = serverSocket.accept();
AcceptThread acceptThread = new AcceptThread(s);
acceptThread.start();
totalThread.add(acceptThread);
}catch(IOException ex2)
{
throw ex2;
}
}
}catch(IOException e){
e.printStackTrace();
}
}
}
private void addWord(String word)
{
listModel.add(0,word);
}
private void sendData() //sendData()用于将服务器发言发送给每一个客户端,具体发送由sendWordToEveryone完成
{
String temp = "xinye说: "+sayWord.getText().trim();
sendWordToEveryone(temp.getBytes());
addWord(temp);
sayWord.setText(""); //.....................................................重新设置为空.
}
class UpdateThread extends Thread
{
public void run()
{
while(true)
{
String[] columName = new String[]{
"用户名称","IP"
};
String[][] tempData = new String[][] {
};
defaultModel = new DefaultTableModel(tempData,columName);
AcceptThread tempThread = null;
Object tempObject = null; //这是什么 tempObject ?
Enumeration enum1 = totalThread.elements(); //
while(enum1.hasMoreElements())
{
tempObject = enum1.nextElement();
if(tempObject !=null)
{
tempThread = (AcceptThread)tempObject;
if(tempThread.isAlive())
defaultModel.addRow(new String[]{
tempThread.getUserName(),
tempThread.getUserIP()
});
else
tempObject= null;
}
nameTable.setModel(defaultModel);//创建了新的DefaultTableModel ,调用JTable的setModel方法后,JTable将显示
//这个DefaultTableModel的内容
}
try
{
sleep(6000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
public static void main(String[] args)
{
JFrame mf = new JFrame("服务端");
Chat_Server server = new Chat_Server();
mf.getContentPane().add(server);
mf.setLocation(150,0);
mf.setSize(300,400);
mf.setDefaultCloseOperation(mf.EXIT_ON_CLOSE);
server.init(); //
mf.setVisible(true);
}
class AcceptThread extends Thread //serverSocket为每一个客户请求都会生成一个新的AcceptThread线程
{
Socket s = null;
InputStream inputStream = null;
OutputStream outputStream = null;
String name= "此处为昵称";
String ip;
boolean flag = true;
BufferedInputStream bis;
BufferedOutputStream bos;
byte[] bytes;
public AcceptThread(Socket s)
{
this.s = s;
ip = s.getInetAddress().getHostAddress(); //要获取客户端地址,这里应该写错了
System.out.println(ip);
try
{
inputStream = s.getInputStream();
outputStream = s.getOutputStream();
bos = new BufferedOutputStream(outputStream,1024);
}catch(IOException e)
{
e.printStackTrace();
if(s!=null)
{
try{
s.close();
}catch(IOException e1){
e1.printStackTrace();
}
}
flag = false;
}
}
public void run()
{
bis = new BufferedInputStream(inputStream,1024);
while(flag)
{
try
{
bytes = new byte[1024];
bis.read(bytes);
String tempS= new String(bytes);
tempS = tempS.trim();
name = tempS.substring(0,tempS.indexOf("说")); //subString or substring
addWord(tempS); //查 addWord
sendWordToEveryone(bytes);
}catch(IOException e)
{
e.printStackTrace();
flag = false;
}
}
}
public void sendWord(byte[] bytes) //AcceptThread用sendWord来向和自己建立专线连接的客户发送数据
{
try
{
bos.write(bytes);
bos.flush();
}catch(IOException e){
e.printStackTrace();
}
}
public String getUserName() //用于返回当前客户端的名称
{
return name;
}
public String getUserIP()
{
return ip;
}
}
private void sendWordToEveryone(byte[] bytes) //sendwordToEveryone从totalThread中提取每一个AcceptThead并向活动的线程发送数据
{
Enumeration enum1 = totalThread.elements();
while(enum1.hasMoreElements())
{
Object tempObject = enum1.nextElement();
if(tempObject != null)
{
AcceptThread tempThread = (AcceptThread)tempObject;
if(tempThread.isAlive())
{
tempThread.sendWord(bytes);
}
}
}
}
}
客户端的代码是:
/**
* @(#)Chat_Client.java
*
*
* @author
* @version 1.00 2009/4/1
*/
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.*;
import java.awt.event.*;
//以上界面相关
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException; //以上通信相关
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import java.lang.InterruptedException; //
public class Chat_Client extends JPanel{
private InputStream inputStream;
private OutputStream outputStream;
private JTextField sayText = new JTextField();
private Socket s;
private DefaultListModel listModel = new DefaultListModel(); //DefaultListModel vs JList
private JList list = new JList(listModel);
private JTextField nameText = new JTextField(10);
private BufferedOutputStream bos;
private JButton sendButton = new JButton("发送(S)");
private String host ="";
private JTextField hostIP = new JTextField(15);
private int port = 8082;
public void init()
{
nameText.setText("此处昵称");
setLayout(new BorderLayout());
add(this.getContextPane(),BorderLayout.CENTER);
add(this.getButtonPanel(),BorderLayout.SOUTH);
//this.startClient(host,port);
}
public static void main(String[] args)
{
JFrame frame = new JFrame("客户端");
frame.setSize(300,400);
frame.setLocation(150,100);
Chat_Client chatClient = new Chat_Client();
chatClient.init();
frame.getContentPane().add(chatClient);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private boolean flag = true;
//startClient与服务器建立连接并获取输入输出流
private void startClient(String host,int port)
{
try
{
host = hostIP.getText();
s = new Socket(InetAddress.getByName(host),port);
inputStream = s.getInputStream();
outputStream = s.getOutputStream();
bos = new BufferedOutputStream(outputStream,1024);
System.out.println(bos);
new ResevWord(inputStream).start();
}catch(UnknownHostException e)
{
e.printStackTrace();
}catch(IOException e)
{
e.printStackTrace();
flag = false;
}
}
//sendData将数据发往服务器
private void sendData()
{
String word = nameText.getText()+"说: "+sayText.getText();
try
{
bos.write(word.getBytes());
bos.flush();
}catch(IOException e)
{
e.printStackTrace();
}
sayText.setText(""); //重新设为空
}
class ResevWord extends Thread //ReseWord可用于创建新的线程,用于接收数据
{
InputStream ips = null;
BufferedInputStream bis =null;
byte[] bytes = new byte[1024];
public ResevWord(InputStream ips)
{
this.ips = ips;
bis = new BufferedInputStream(ips,1024);
}
public void run()
{
while(flag) //循环,多个客户端?
{
try{
try{
bis.read(bytes);
String word =new String(bytes);
word = word.trim();
listModel.add(0,word); //在此列表的指定位置处插入指定元素
}catch(IOException ex){
ex.printStackTrace();
flag = false;
}
}catch(Exception ee){
ee.printStackTrace();
}
}
}
}
private JPanel getContextPane()
{
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
JPanel p1 = new JPanel();
p1.setLayout(new BorderLayout());
JPanel p11 = new JPanel();
//p11.setLayout(new BorderLayout());
JLabel j1 = new JLabel("我是");
p11.add(j1);
p11.add(nameText);
JPanel p12 = new JPanel();
JLabel j2 = new JLabel("服务器IP");
p12.add(j2);
p12.add(hostIP);
JPanel p13 = new JPanel();
JButton connectServer = new JButton("连接服务器");
connectServer.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
startClient(host,8082);
}
});
p13.add(connectServer);
p1.add(p11,BorderLayout.NORTH);
p1.add(p12,BorderLayout.CENTER);
p1.add(p13,BorderLayout.SOUTH);
panel.add(p1,BorderLayout.NORTH);
panel.add(new JScrollPane(list),BorderLayout.CENTER); //有个list
return panel;
}
private JPanel getButtonPanel()
{
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(sayText,BorderLayout.CENTER);
sendButton.setMnemonic('s'); //快捷键 ALT + S sendButton 发送
sendButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
sendData();
}
});
panel.add(sendButton,BorderLayout.EAST);
return panel;
}
}
本文代码来自:http://topic.csdn.net/u/20090404/01/2f349eb7-26b5-49ae-8955-78cc74bfd545.html
相关推荐
本例“C# socket remoting 例子 源代码”结合了这两种技术,为我们提供了一个使用C#实现的远程方法调用(Remote Method Invocation, RMI)系统,通过Socket进行数据传输。 首先,让我们深入了解C#中的Socket编程。...
“lib”和“static_lib”可能是库文件夹,包含编译好的动态链接库(.dll)或静态链接库(.lib),这些库文件是HP-Socket组件的核心部分,开发者可以在自己的易语言项目中引用它们来实现网络功能。动态链接库在运行时...
`Tstsockw.h`是头文件,其中包含了类定义和函数声明,供其他源文件引用。 9. **资源文件**:`rsrc.h`可能是编译自`.rc`资源文件的头文件,包含了程序的图标、菜单和其他资源定义。 理解并实践这些知识点,可以帮助...
"HP_Socket.ec" 文件可能是一个编译后的静态或动态链接库,用于在项目中直接引用HP-Socket的功能,而无需再次编译源码。这为开发者提供了方便,他们可以直接将库文件添加到自己的项目中,然后调用HP-Socket提供的...
在C#中,委托是一种类型安全的函数指针,它可以引用方法。在Socket通信中,由于网络I/O操作通常是阻塞的,为了不阻塞主线程,我们通常使用异步调用。委托配合BeginInvoke/EndInvoke方法或者async/await关键字可以...
对于学习者来说,这样的例子可以帮助理解Socket通信的基本流程,并为进一步的网络编程打下基础。 此外,C#的异步编程模型(如async/await)也可以用于Socket通信,以提高应用程序的响应性。在实际应用中,你可能还...
这个VB使用socket控件源码的例子,将帮助初学者理解如何在实际项目中运用Socket控件进行网络通信,包括如何建立连接、发送和接收数据,以及处理相关事件。对于经验丰富的开发者来说,也可以借鉴其中的设计思路和解决...
在这些数据结构中,每个节点包含数据和指向其他节点的引用。以下是一个简单的链表节点定义: ```python class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next # 创建一个3...
这个例子展示了如何在Android平台上利用网络编程技术实现客户端与服务器之间的通信。以下是对这个源码资源的详细解释: 1. **Android基础知识**:首先,我们需要了解Android开发的基本概念,包括Android Studio IDE...
在这个例子中,我们看到的是一个C#实现的Socket文件传输示例,用于发送文本文件。这个程序分为两部分:发送文件的窗体和接收文件的窗体。 首先,让我们详细解释发送文件的部分: 1. **引用库**:程序使用了`System...
在.NET框架中,C#语言提供了丰富的网络编程接口,其中包括了使用完成...你可以通过阅读源码来深入了解其实现原理,或者直接引用DLL文件到你的项目中进行实践。记得在实际使用前先了解库的许可协议,确保符合使用条件。
SocketTest.7z是一个压缩包,包含了基于.NET Core 3框架实现的SignalR服务器和客户端通信的示例项目。SignalR是一个实时通信库,它使得Web应用程序能够进行实时双向通信,即服务器可以主动向客户端推送数据,而不...
当对象仅由弱引用指向时,垃圾收集器会在下一次执行时将其视为可回收的,即使还有弱引用存在。因此,使用弱引用构建Map可以避免上述问题。例如,可以将SocketManager中的HashMap替换为WeakHashMap,其中的键(Socket...
在这个例子中,MFC可能被用来创建用户界面、管理窗口事件和处理消息循环。 3. Socket编程:Socket是网络通信的基础,它定义了进程之间如何通过网络进行通信的接口。在C++中,通常通过包含或头文件来使用套接字API。...
这个例子展示了如何在C#中使用Socket进行基本的TCP通信。然而,实际应用中,你需要处理错误、异步操作、多线程、数据编码等问题。同时,还可以使用高级的套接字功能,如套接字选项、缓冲区管理和连接池。 总结来说...
在Unity3D中,Socket是用于网络通信的重要组件,它...虽然这个例子很基础,但它为理解如何在Unity项目中进行网络通信奠定了基础。在实际开发中,可能需要更复杂的错误处理和状态管理,以确保可靠的数据传输和网络连接。
在这个例子中,Android客户端使用Socket连接到PC服务器,通过指定的IP地址(如"192.168.1.100")和端口号(如5554)。 2. **Android Activity**:`SocketConnect`是一个继承自`Activity`的类,它是Android应用的...
本篇文章将介绍如何使用UDP(用户数据报协议)来实现简单的Socket编程,并通过一个实际的例子来帮助读者更好地理解和掌握这一技术。 #### 二、Socket简介 Socket是应用程序与网络通信协议栈之间的一个抽象层,它为...
10. **替代技术**:随着HTML5的普及,现在更常见的是使用JavaScript、HTML和CSS创建Web应用程序,如WebGL进行3D图形渲染,或者使用Web Socket进行实时通信,而不再依赖Java Applet。 了解这些知识点后,你可以通过...
6. **工程文件(工程1.vbp, 工程1.vbw)**: .vbp文件是Visual Basic工程文件,包含了项目的配置信息,如引用的库、使用的控件、项目结构等。而.vbw文件则是工作区文件,保存了开发者的工作环境设置,如窗口位置、打开...