要求,是服务器程序,在某端口监听,收到客户端的输入后,返回一段。。
解决方案 »
- 一个简单的服务器端程序,为什么通不过呢?
- JAVA
- 抽象类概念的问题,关于类 AbstractAction
- 谁能给一个mdb5加密的java版加密算法?
- String s; 和 String s = null; 和String s = "a";有什么区别
- 关于“反射”和“代理”请教大家
- javamail附件中文名字乱码问题!
- 请教各位:WinXP不支持Java Apple,该如何是好?
- 高分求weblogi clience,能用!!6.1版
- Java Swing中如何建立表头(尤其是NetBeans中如何操作?)
- 发布一个小软件:-)
- together和myeclipse怎样才能用在一个项目中?
import java.net.*;
class TCPServer{
public static void main(String argv[])throws Exception
{
String clientSentence;
String capitalizedSentence;
ServerSocket welcomeSocket=new ServerSocket(6789);
while(true)
{
Socket connectionSocket=welcomeSocket.accept();
BufferedReader inFromClient=new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient=new DataOutputStream(connectionSocket.getOutputStream());
clientSentence=inFromClient.readLine();
capitalizedSentence=clientSentence.toUpperCase()+'\n';
outToClient.writeBytes(capitalizedSentence);
}
}
}
import java.nio.CharBuffer;
import java.nio.charset.*;
import java.nio.ByteBuffer;
import java.io.*;
import java.util.Set;
import java.util.Iterator;
import struct.*;/**
* @author xxx
*
* A Non-blocking Socket for java
*/
public class DySocketServer {
//构造函数
public DySocketServer(){
//创建服务端Socket
try{
ServerSocketChannel server = ServerSocketChannel.open();
//设置成非阻塞模式
server.configureBlocking(false);
//绑定主机端口
server.socket().bind(new java.net.InetSocketAddress(8000));
System.out.println("Server is at port 8000");
//创建一个监视器Selector对象
Selector selector = Selector.open();
//注册接受端口
server.register(selector,SelectionKey.OP_ACCEPT);
//开始服务循环
for(;;){
//等待事件
selector.select();
//获得关键字标识
Set keys = selector.selectedKeys();
System.out.println(keys.size()+" users connect");
Iterator i = keys.iterator();
//对每个关键字处理
while(i.hasNext()){
SelectionKey key = (SelectionKey)i.next();
//删除当前key
i.remove();
// 如果可以访问,客户端请求一个连接
if(key.isAcceptable()){
SocketChannel client = server.accept();
/* if(client == null){
}else
{
}*/
client.configureBlocking(false);
client.register(selector,SelectionKey.OP_READ);
continue;
}
//如果可读,服务器端准备读取
if(key.isReadable()){
ReadableByteChannel client = (ReadableByteChannel)key.channel();
// SocketChannel client = (SocketChannel)key.channel();
//从客户端读取数据
int BufferSize = 1024;
ByteBuffer buffer = ByteBuffer.allocate(BufferSize);
// buffer.clear();
buffer.clear();
try{
int rec = client.read(buffer);
if(rec > 0){
System.out.println(rec+ "bytes has been read");
}
}catch(IOException e){
e.printStackTrace();
System.exit(0);
continue;
}
//在控制段显示bytes
buffer.flip();
Charset charset = Charset.forName("ISO-8859-1");
CharsetDecoder decoder = charset.newDecoder();
CharBuffer charBuffer = decoder.decode(buffer);
System.out.print(charBuffer.toString());
key.cancel();
continue;
}
}
}
}catch(IOException e){
e.printStackTrace();
}
}
}
import java.net.*;
public class ThreadedReversalServer
{
public static void main(String[] agrs)
{
int i = 0;
try
{
// 创建一个监听8189端口的ServerSocket
ServerSocket s = new ServerSocket(8189);
for (;;)
{
// 启动ServerSocket的监听
Socket insock = s.accept();
System.out.println("Thread " + i + " run.");
// 启动处理客户端信息的线程
new ThreadReversal(insock, i).start();
i++;
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
class ThreadReversal extends Thread
{
private Socket sock;
private int counter;
public ThreadReversal(Socket s, int i)
{
sock = s;
counter = i;
}
public void run()
{
try
{
// 建立输入流通道
BufferedReader in =
new BufferedReader(
new InputStreamReader(sock.getInputStream()));
// 建立输出流通道
PrintWriter out =
new PrintWriter(sock.getOutputStream(), true/*autoFlush*/);
out.println("Hello! Please input. Enter quit to exit.");
while(true)
{
String line = in.readLine();
if (null == line)
continue;
if (line.trim().equals("serverquit")||line.trim().equals("serverexit"))
{
System.out.println(line);
break;
}
else
{
// 翻转输入的字符串
StringBuffer rline = new StringBuffer();
for (int i = line.length(); i > 0; i--)
rline.append(line.charAt(i - 1));
out.println("Reversed: " + rline.toString());
}
}
out.close();
in.close();
sock.close();
System.out.println("Thread " + counter + " closed.");
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
客户端:
/*
* talkclient.java
*
* Created on 2005年11月1日, 下午10:57
*/package zhide2;import java.io.*;
import java.net.*;
/**
*
* @author zhide1548
*/
public class talkclient extends java.awt.Frame {
/** Creates new form talkclient */
public talkclient() {
try{
socket=new Socket("127.0.0.1",4700);
os=new PrintWriter(socket.getOutputStream());
is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
}catch(Exception e){
System.out.println("Error"+e);
}
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {//GEN-BEGIN:initComponents
panel1 = new java.awt.Panel();
label1 = new java.awt.Label();
textField1 = new java.awt.TextField();
button1 = new java.awt.Button();
button2 = new java.awt.Button();
textArea1 = new java.awt.TextArea(); setFocusCycleRoot(false);
setResizable(false);
setTitle("\u5ba2\u6237\u7aef\u7a97\u4f53");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
public void windowOpened(java.awt.event.WindowEvent evt) {
formWindowOpened(evt);
}
}); label1.setText("\u53cd\u8f6c\u6587\u5b57\uff1a");
panel1.add(label1); textField1.setText(" ");
panel1.add(textField1); button1.setLabel("\u53d1\u9001");
button1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
button1ActionPerformed(evt);
}
}); panel1.add(button1); button2.setLabel("\u6e05\u7a7a");
button2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
button2ActionPerformed(evt);
}
}); panel1.add(button2); add(panel1, java.awt.BorderLayout.SOUTH); add(textArea1, java.awt.BorderLayout.CENTER); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-400)/2, (screenSize.height-400)/2, 400, 400);
}//GEN-END:initComponents private void formWindowOpened(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowOpened
// TODO 将在此处增加您的处理代码:
textField1.setText("");
}//GEN-LAST:event_formWindowOpened private void button2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_button2ActionPerformed
// TODO 将在此处增加您的处理代码:
textArea1.setText("");
}//GEN-LAST:event_button2ActionPerformed private void button1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_button1ActionPerformed
// TODO 将在此处增加您的处理代码:
try{
readline=textField1.getText();
os.println(readline);
os.flush();
textArea1.append("Client:"+readline+"\n");
textArea1.append("Server:"+is.readLine()+"\n");
textField1.setText("");
}catch(Exception e){
System.out.println("Error"+e);
}
}//GEN-LAST:event_button1ActionPerformed
/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
try{
os.println("bye");
os.flush();
os.close();
is.close();
socket.close();
}catch(Exception e){
System.out.println("Error"+e);
}
System.exit(0);
}//GEN-LAST:event_exitForm
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
new talkclient().show();
}
// 变量声明 - 不进行修改//GEN-BEGIN:variables
private java.awt.Button button1;
private java.awt.Button button2;
private java.awt.Label label1;
private java.awt.Panel panel1;
private java.awt.TextArea textArea1;
private java.awt.TextField textField1;
// 变量声明结束//GEN-END:variables
private Socket socket;
private PrintWriter os;
private BufferedReader is;
private String readline;
}
服务器端:
/*
* talkserver.java
*
* Created on 2005年11月1日, 下午11:43
*/package zhide2;import java.net.*;
import java.io.*;
import zhide.ServerThread;
/**
*
* @author zhide1548
*/
public class talkserver extends java.awt.Frame {
/** Creates new form talkserver */
public talkserver() {
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {//GEN-BEGIN:initComponents
textArea1 = new java.awt.TextArea(); setResizable(false);
setTitle("\u670d\u52a1\u5668\u7aef\u7a97\u4f53");
addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentShown(java.awt.event.ComponentEvent evt) {
formComponentShown(evt);
}
});
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
}); textArea1.setEditable(false);
textArea1.setEnabled(false);
add(textArea1, java.awt.BorderLayout.CENTER); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-400)/2, (screenSize.height-400)/2, 400, 400);
}//GEN-END:initComponents private void formComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentShown
// TODO 将在此处增加您的处理代码:
try{
serverSocket=new ServerSocket(4700);
}catch(IOException e){
System.out.println("could not listen on port:4700");
System.exit(-1);
}
while(true){
try{
new ServerThread(serverSocket.accept(),clientnum).start();
}catch(Exception e){
System.out.println("Error:"+e);
}
textArea1.append("第"+(clientnum+1)+"个用户进行连接\n");
//System.out.println("第"+(clientnum+1)+"个用户进行连接");
clientnum++;
}
}//GEN-LAST:event_formComponentShown
/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
try{
serverSocket.close();
}catch(Exception e){
System.out.println("error"+e);
}
System.exit(0);
}//GEN-LAST:event_exitForm
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
new talkserver().show();
}
// 变量声明 - 不进行修改//GEN-BEGIN:variables
private java.awt.TextArea textArea1;
// 变量声明结束//GEN-END:variables
private int clientnum;
private ServerSocket serverSocket=null;
}
/*
* ServerThread.java
*
* Created on 2005年10月17日, 下午4:26
*/package zhide;import java.io.*;
import java.net.*;/**
*
* @author zhide1548
*/
public class ServerThread extends Thread{
Socket socket=null;
int clientnum;
/** Creates a new instance of ServerThread */
public ServerThread(Socket socket,int num) {
this.socket=socket;
clientnum=num+1;
}
/**
* @param args the command line arguments
*/
public void run() {
try{
String line;
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter os=new PrintWriter(socket.getOutputStream());
line=is.readLine();
StringBuffer neline=new StringBuffer(line).reverse();
while(!line.equals("bye")){
os.println(neline);
os.flush();
//System.out.println("Client"+clientnum+":"+line);
//System.out.println("Server:"+neline);
line=is.readLine();
neline=new StringBuffer(line).reverse();
}
is.close();
os.close();
socket.close();
System.out.println("第"+clientnum+"个用户退出连接");
}catch(Exception e){
System.out.println("Error:"+e);
}
}
}