利用socket的tcp协议~~开发
是服务器端对多个客户端
当每个客户端登录后服务器端都会给客户端发送信息,客户端与服务器端永久保持链接状态,而且对每个客户端所发的信息都是指定的
例如当客户端01链接服务器后服务器就会给其编个号01,然后服务器段的数据经过处理后如果有01的信息就给01发送信息,如果没有就不给其发。帮忙给打个框架就好,
是服务器端对多个客户端
当每个客户端登录后服务器端都会给客户端发送信息,客户端与服务器端永久保持链接状态,而且对每个客户端所发的信息都是指定的
例如当客户端01链接服务器后服务器就会给其编个号01,然后服务器段的数据经过处理后如果有01的信息就给01发送信息,如果没有就不给其发。帮忙给打个框架就好,
解决方案 »
- 我也问个正则表达式的问题
- java udp网络通信关于端口的问题
- 高分求21cn的面试题目,java工程师的,有那位大哥大姐去面试过的,可以把题目贴上来吗????万分感谢!!!
- 找骂的问题:用Java = 便宜的软件 + 贵重的硬件!
- java 包和类是怎么个关系?
- 请问在java中的JTextField中如何使输入的字符是‘*’,用作输入密码,在线等
- 高分求reflect的资料,在线等待
- 《Java2面向对象编程指南》这本书怎么样?
- java中如何实现二维(多维)动态数组.谢谢
- 在线等 java语言判断 ,由于中文和英文所占字节不一致,页面显示中英文所占宽度不一致,如何高效获取字符串所占字节数,来设置内容所在控件高度
- java读取文本文件格式的问题?
- 怎么样进行深度复制呀?
===========================================
import java.net.InetAddress;
import java.net.UnknownHostException;/**
* 客户端Demo,创建三个子线程访问服务器
*
* @author Lv
*/
public class ClientDemo
{
/**
* 程序入口
* @param args
*/
public static void main(String[] args)
{
try
{
InetAddress inetAddress1 = InetAddress.getByName("192.168.0.14"); new ConnectThread(inetAddress1, 4665, "12345\t67890");
new ConnectThread(inetAddress1, 4665, "abcde\tfghij");
new ConnectThread(inetAddress1, 4665, "我你他"); } catch (UnknownHostException e)
{
e.printStackTrace();
System.out.println("unknow host,can't connect to server!");
}
}
}////////////////////////////////////////////import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;/**
* 建立与服务器连接的子线程
*
* @author Lv Lihua
*/
public class ConnectThread implements Runnable
{
/**
* 建立与服务器连接的Socket对象
*/
private Socket sckConnectObj; /**
* 连接的服务器端口
*/
private int port; /**
* 向服务器发送的字串
*/
private String strSend; /**
* 创建一个同步对象
*/
private static Object synObj = new Object(); /**
* 构造函数 创建与服务器连接的新线程
*
* @param serverInetAddress 包含服务器地址信息的InetAddress对象
* @param port 服务器端口
* @param str 向服务器发送的字符串
*/
public ConnectThread(InetAddress serverInetAddress, int port, String str)
{
strSend = str;
this.port = port;
boolean sockError = false; try
{
this.sckConnectObj = new Socket(serverInetAddress, port);
}
catch (IOException e)
{
System.err.println(
"Thread connect server:"
+ serverInetAddress.getHostAddress()
+ " port:"
+ port
+ " error!");
sockError = true;
}
if (!sockError)
{
new Thread(this, serverInetAddress.getHostAddress()).start();
}
} /**
* 线程启动入口
*/
public void run()
{
InputStream inStr; //与服务器连接Socket对象的输入流
OutputStream outStr; //与服务器连接Socket对象的输出流
byte[] bDataRece = new byte[256]; //接收数据的缓冲区,256 bytes
int dataLen; //接收的数据长度 for (int i = 3; i > 0; i--) //向服务器发送三次数据
{
try
{
inStr = sckConnectObj.getInputStream();
outStr = sckConnectObj.getOutputStream();
outStr.write(strSend.getBytes()); //发送数据
dataLen = inStr.read(bDataRece); //接收数据
if (dataLen == -1)
{
System.out.println("the server close connect");
break;
}
else
{
synchronized (synObj) //接收,发送数据显示处于同步语句内,避免显示混乱
{
System.out.println(
Thread.currentThread().getName()
+ ":"
+ sckConnectObj.getLocalPort()
+ ">>>send data:"
+ strSend); System.out.println(
Thread.currentThread().getName()
+ ":"
+ sckConnectObj.getLocalPort()
+ "<<<receive data from server:"
+ "\n\t"
+ new String(bDataRece, 0, dataLen)
+ "\n");
}
}
Thread.sleep(500);
}
catch (IOException e)
{
System.out.println(">>>>conntecting to server error! maybe been closed");
} catch (InterruptedException e)
{
System.out.println("sleep connect thread been interupted!");
e.printStackTrace();
}
} //for语句end
System.out.println(
"=====Thread\""
+ Thread.currentThread().getName()
+ ":"
+ sckConnectObj.getLocalPort()
+ "\"exit!");
}
}
===========================
import java.io.*;
import java.net.*;/**
* 服务器端Demo,建立侦听,将接受客户端连接的对象传递给新创建的线程
*
* @author Lv
*/
public class ServerDemo
{
public static void main(String[] args)
{
int port = 4665; //侦听端口,4665
try
{
ServerSocket sObj = new ServerSocket(port);
while (true)
{
System.out.println("====the server listening in the port 4665====");
Socket acptSckObj = sObj.accept(); //创建接受连接对象
System.out.println(
"client\""
+ acptSckObj.getInetAddress().getHostName()
+ "\"Requesting connect");
new ListenThread(acptSckObj); //将接受连接的对象传给新线程
}
} catch (BindException e)
{
System.out.println("Bind port error!(Address already in use)");
System.exit(-1);
} catch (IOException e)
{
e.printStackTrace();
}
}
}/////////////////////////////////////////////
import java.net.*;
import java.io.*;/**
* 创建服务器接受连接线程
*
* @author Lv
*/
public class ListenThread implements Runnable
{
/**
* 接受连接的Socket对象
*/
private Socket acptSckObj; /**
* 服务器接收到的数据
*/
private byte[] bDataRece; /**
* 创建一个用于同步语句的对象
*/
private static Object synObj = new Object(); /**
* 构造函数,创建连接后的数据处理线程
*
* @param serverObj 服务器接收连接请求的Socket对象
*/
public ListenThread(Socket serverObj)
{
bDataRece = new byte[256];
this.acptSckObj = serverObj;
new Thread(this, this.acptSckObj.getInetAddress().getHostName()).start();
} /**
* 将字符串反向后返回
*
* @param str 待处理字符串
* @return 反转后的字符串
*/
public String ReverseStr(String str)
{
int strLen = str.length();
byte[] strByte = str.getBytes();
for (int i = 0; i < strLen / 2; i++)
{
byte bTemp = strByte[i];
strByte[i] = strByte[strLen - 1 - i];
strByte[strLen - 1 - i] = bTemp;
}
return new String(strByte);
} /**
* 线程入口
*/
public void run()
{
InputStream inStr;
OutputStream outStr;
int dataLen; try
{
inStr = acptSckObj.getInputStream();
outStr = acptSckObj.getOutputStream(); while (true)
{
try //捕获回客户端断开连接引起的SocketException
{
dataLen = inStr.read(bDataRece);
}
catch (SocketException e)
{
System.out.println(
"client\""
+ acptSckObj.getInetAddress().getHostName()
+ "\"-port\""
+ acptSckObj.getPort()
+ "\"connect closed");
break;
}
String strGet = new String(bDataRece, 0, dataLen);
outStr.write(ReverseStr(strGet).getBytes());
outStr.flush();
synchronized (synObj) //避免显示混乱,用同步语句保证两显示信息在一起
{
System.out.println(
"\n>>>receive client\""
+ acptSckObj.getInetAddress().getHostName()
+ "\"_port\""
+ acptSckObj.getPort()
+ "\"'s data("
+ dataLen
+ "bytes):\n"
+ strGet);
System.out.println("<<<the sever reply string:\n" + ReverseStr(strGet));
}
strGet = "";
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
你凑合着看吧,自己再慢慢改,呵呵
最近才写了个,如果需要可以加我 442143212