| 网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 |
![]() |
| Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道 |
用java进行网络编程确实很方便,很容易上手。这几天用java进行socket编程,收获不少。 网管网www.bitscn.com
首先,进行服务端的编程,作为服务端,编程主要按下面几个步骤进行: 中国网管论坛bbs.bitsCN.com
// 1. 创建socket
ServerSocket ss = new ServerSocket(PortNumber);
Socket s = ss.accept(); //监听器,产生阻塞,直到有连接才停止阻塞。
// 2. 打开输入流、输出流
OutputStream os = s.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(os);
InputStream is = s.getInputStream();
网管网www.bitscn.com
// 3. 根据一定的协议读写数据
// 服务器 --> 客户
//os.write(\"Hello,I am Server!\".getBytes());
bos.write(\"Hello,I am Server!\".getBytes());
bos.flush(); //注意!! 网管下载dl.bitscn.com
// 服务器 <-- 客户
byte[] buf = new byte[100];
int len = is.read(buf);
System.out.println(new String(buf, 0, len)); 网管论坛bbs_bitsCN_com
// 4. 关系流和Socket
//os.close();
bos.close();
is.close();
s.close();
ss.close(); 网管网www.bitscn.com
作为客户端则分为下面几个步骤,其实和服务端差不多,只是少了用ServerSocket进行监听。 网管下载dl.bitscn.com
// 1. 创建socket
Socket s = new Socket(InetAddress.getByName(\"localhost\"),
PortNumber);
// 2. 打开输入流、输出流
OutputStream os = s.getOutputStream();
InputStream is = s.getInputStream();
// 3. 根据一定的协议读写数据
// 服务器 --> 客户
byte[] buf = new byte[100];
int len = is.read(buf);
System.out.println(new String(buf, 0, len));
// 服务器 <-- 客户
os.write(\"Hello,I am Client!\".getBytes());
中国网管论坛bbs.bitsCN.com
// 4. 关系流和Socket
os.close();
is.close();
s.close();
网管联盟bitsCN_com
上面这些只是一个单线程的服务端->客户端的程序,只能进行一次通讯,多次通讯将被告知无法连接。
这时,我们就需要用到进程Thread进行编程,将其改造成多线程聊天程序,可以同时进行多客户端的连接与发送信息。
网管网www_bitscn_com
代码如下: 网管联盟bitsCN@com
//Server.java
import java.awt.*;
import java.net.*;
import java.io.*;
网管网www.bitscn.com
public class Server extends Thread {
ServerSocket skt; 中国网管联盟bitsCN.com
Socket Client[]=new Socket[10];;
Socket Client1=null;
int i = 0; 网管下载dl.bitscn.com
TextArea in; 中国网管联盟bitsCN.com
int port,k=0,l=0; 网管联盟bitsCN_com
//BufferedReader theInputStream; 网管网www.bitscn.com
PrintStream theOutputStream; 网管bitscn_com
//String readin; 网管网www_bitscn_com
Face chat;
网管u家u.bitsCN.com
public Server(int port, Face chat) {
try {
this.port = port;
skt = new ServerSocket(port);
this.chat = chat;
} catch (IOException e) {
chat.ta.append(e.toString());
}
}
网管u家u.bitsCN.com
public void run() {
网管网www.bitscn.com
chat.ta.append(\"等待连线......\");
while (true) {
//System.out.print(\"\"+i+\"\n\");
try {
网管u家u.bitsCN.com
Client[k] = skt.accept(); /* 接收客户连接 */
//当有客户端连接时就新建一个子线程
if (i < 2) {
ServerThread server[] = new ServerThread[10];
server[k]= new ServerThread(Client[k], this.chat, i);
l=server.length;
server[k].start();
chat.ta.append(\"客户端\" + Client[k].getInetAddress() + \"已连线\n\");
/*theInputStream = new BufferedReader(new InputStreamReader(Client 网管论坛bbs_bitsCN_com
.getInputStream()));*/
//for(int j=0;j<server.length;j++)
theOutputStream = new PrintStream(server[k].getClient().getOutputStream());
i = server[k].getI();
k++;
} else {
//theOutputStream = new PrintStream(null); 网管bitscn_com
} 网管下载dl.bitscn.com
} catch (SocketException e) {
//chat.ta.append(\"连线中断!\n\"); 网管网www_bitscn_com
//chat.clientBtn.setEnabled(true);
//chat.serverBtn.setEnabled(true);
//chat.tfaddress.setEnabled(true);
//chat.tfport.setEnabled(true);
//try { 网管论坛bbs_bitsCN_com
//skt.close();
//Client.close();
/
|
0
|
评论加载中…