在下写了服务器端的程序:包testsocket,包中唯一文件Main.java 代码如下:目的接收来自客户端某个JTextField的内容,并显示在JTextArea jta1中,但不成功,请指教
package testsocket;
import java.net.*;
import java.io.*;
import java.util.*;
import java.lang.*;
import javax.swing.*;public class Main extends javax.swing.JFrame { private ServerSocket ss; private Socket servers; java.io.BufferedReader sdis=null; java.io.InputStreamReader isr=null; java.io.BufferedWriter bw=null;//输出流
java.io.OutputStreamWriter osw=null;//
public Main() {
initComponents();
waitlink();
}
void waitlink()
{
try
{
ss=new ServerSocket(8000);
servers=ss.accept();
sdis=new BufferedReader(isr=new InputStreamReader(servers.getInputStream()));
bw=new BufferedWriter(osw=new OutputStreamWriter(servers.getOutputStream()));
while(sdis.readLine()!=null)
{
jta1.setText( jta1.getText()+sdis.readLine() );
jta1.repaint();
}
bw.write("hello");
}
catch(Exception e)
{
}
}
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
jta1 = new javax.swing.JTextArea(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setText("\u670d\u52a1\u5668\u7aef"); jta1.setColumns(20);
jta1.setRows(5);
jScrollPane1.setViewportView(jta1); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 343, Short.MAX_VALUE)
.add(47, 47, 47))
.add(layout.createSequentialGroup()
.add(172, 172, 172)
.add(jLabel1)
.addContainerGap(180, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.addContainerGap()
.add(jLabel1)
.add(19, 19, 19)
.add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 217, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addContainerGap(39, Short.MAX_VALUE))
);
pack();
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Main().setVisible(true);
}
});
}
// 变量声明 - 不进行修改
private javax.swing.JLabel jLabel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jta1;
// 变量声明结束
}
package testsocket;
import java.net.*;
import java.io.*;
import java.util.*;
import java.lang.*;
import javax.swing.*;public class Main extends javax.swing.JFrame { private ServerSocket ss; private Socket servers; java.io.BufferedReader sdis=null; java.io.InputStreamReader isr=null; java.io.BufferedWriter bw=null;//输出流
java.io.OutputStreamWriter osw=null;//
public Main() {
initComponents();
waitlink();
}
void waitlink()
{
try
{
ss=new ServerSocket(8000);
servers=ss.accept();
sdis=new BufferedReader(isr=new InputStreamReader(servers.getInputStream()));
bw=new BufferedWriter(osw=new OutputStreamWriter(servers.getOutputStream()));
while(sdis.readLine()!=null)
{
jta1.setText( jta1.getText()+sdis.readLine() );
jta1.repaint();
}
bw.write("hello");
}
catch(Exception e)
{
}
}
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
jta1 = new javax.swing.JTextArea(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setText("\u670d\u52a1\u5668\u7aef"); jta1.setColumns(20);
jta1.setRows(5);
jScrollPane1.setViewportView(jta1); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 343, Short.MAX_VALUE)
.add(47, 47, 47))
.add(layout.createSequentialGroup()
.add(172, 172, 172)
.add(jLabel1)
.addContainerGap(180, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.addContainerGap()
.add(jLabel1)
.add(19, 19, 19)
.add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 217, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addContainerGap(39, Short.MAX_VALUE))
);
pack();
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Main().setVisible(true);
}
});
}
// 变量声明 - 不进行修改
private javax.swing.JLabel jLabel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jta1;
// 变量声明结束
}
解决方案 »
- 初学JAVA,由“无法从静态上下文中引用非静态方法”引出的疑问
- 对单例模式理解上的问题..............
- 关于swt的api说明文档那里可以看到的?
- 怎么把一个非static变量的值赋给static变量,在线等!
- 我写好了一个连接数据库的类 但是在jdk下编译时 他报的找不到sqlserver驱动器的错误
- 怎么把.java文件编译成可执行文件
- JAVA mail!邮件接受下来如何放!放在什么地方!
- 一个关于tomcat的问题
- 为什么新浪的邮件可以读出来,而自已的Exchange Server服务器邮件却读不出?
- 请教: Javaswing 和 Oracle JDBC thin 连接的问题
- [每日送分]前两个回复的每人10分^_^
- javax.activation.UnsupportedDataTypeException
楼主【cqandy】截止到2008-07-24 13:25:48的历史汇总数据(不包括此帖):
发帖的总数量:11 发帖的总分数:270 每贴平均分数:24
回帖的总数量:9 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:11 结贴的总分数:270
无满意结贴数:1 无满意结贴分:50
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:9.09 % 无满意结分率:18.52 %
敬礼!
package clientsocket;
import java.net.*;
import java.io.*;
import java.util.*;
import java.lang.*;
import javax.swing.*;
public class Main extends javax.swing.JFrame { Socket c_soc=new Socket();
java.net.SocketAddress sa=null;
BufferedWriter bwout=null;
BufferedReader brin=null; java.io.InputStreamReader c_isr=null;
String c_strin=null;
public Main() {
initComponents();
}
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jta1 = new javax.swing.JTextArea();
jTextField2 = new javax.swing.JTextField(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setText("\u8f93\u5165\u670d\u52a1\u5668IP:"); jButton1.setText("\u53d1\u9001");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
}); jta1.setColumns(20);
jta1.setRows(5); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.addContainerGap()
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(jTextField2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 263, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(14, 14, 14)
.add(jButton1))
.add(layout.createSequentialGroup()
.add(jLabel1)
.add(15, 15, 15)
.add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 157, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(org.jdesktop.layout.GroupLayout.TRAILING, jta1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.addContainerGap()
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel1)
.add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jta1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 203, Short.MAX_VALUE)
.add(17, 17, 17)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jTextField2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jButton1))
.add(21, 21, 21))
);
pack();
}// </editor-fold> private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO 将在此处添加您的处理代码:
try{
//c_soc=new Socket(jTextField1.getText().toString().trim(),8000);
c_soc=new Socket();
sa=new java.net.InetSocketAddress(jTextField1.getText(),8000);
c_soc.connect(sa);
bwout=new BufferedWriter(new java.io.OutputStreamWriter(c_soc.getOutputStream()));
bwout.write(jTextField2.getText());
//bwout.newLine();
bwout.flush();
brin=new BufferedReader(c_isr=new InputStreamReader(c_soc.getInputStream()));
while(brin.readLine()!=null) {
jta1.setText(jta1.getText()+jTextField2.getText()+"\n");
}
} catch(Exception e) {
}
finally
{
try {
bwout.close();
} catch (IOException ex) {
ex.printStackTrace();
}
try {
c_soc.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Main().setVisible(true);
}
});
}
// 变量声明 - 不进行修改
private javax.swing.JButton jButton1;//单击此按钮,就连接服务器并发送
private javax.swing.JLabel jLabel1;
private javax.swing.JTextField jTextField1;//输入服务器IP
private javax.swing.JTextField jTextField2;//输入发送到服务器的内容
private javax.swing.JTextArea jta1;
// 变量声明结束
}
{
jta1.setText(jta1.getText()+sdis.readLine());
jta1.repaint();
} 应改为:
String lineStr = null;
while((lineStr=sdis.readLine())!=null)
{
jta1.setText(jta1.getText()+lineStr);
jta1.repaint();
} 另外,如果是在本机上测试,客户端的代码:
sa=new java.net.InetSocketAddress(jTextField1.getText(),8000); //jTextField1.getText()的值应为localhost
在下的意思其实是想说,比如:服务器端是通过
ss=new ServerSocket(8000);
servers=ss.accept();
阻塞在那里,如果有client接入,就会连通这个client接入,并为之生成一个socket在服务器端,并且因为这个阻塞被一个client连接激活,而可以接收一个由此次client连接所发来的一个输出流,是吧.如果我理解没有错的话那么,如果服务器端,想要由某一个动作返回一个字符串,比如由服务器端的一个JButton按下后,传出一个JTextField中的值到一个client端,那么这个client端如何监视(或者说监听)服务器向它这个IP传来了一个返回数据呢???在下先不去讨论多客户,多线程,就一个c-s-c-s的点对点而言来向各位请教,望指点,client如何监听?
然后,我自己写一个事件来处理发送到server的信息?只要线程中接收到了一个由服务器传来的数据后,就是它在线程中处理相应的动作(比如,显示到某个容器中去)即可???