概述
服务器端TCPServer .java
package
com.javaeye.kang.socket;
import java.net.ServerSocket;
import java.net.Socket;
//Socket 服 务 器端
public class TCPServer {
public static void main(String[] args) throws Exception {
// 创 建一个 Socket 服 务 器端, 带 有端口号(能 让 客 户 端能具体 连过 来)
ServerSocket ss = new ServerSocket(6666);
//Server 端 傻 等
Socket s = ss.accept();
System. out .println( "a client accept!" );
}
}
客户端TCPClient .java
package
com.javaeye.kang.socket;
import java.net.Socket;
//Socket 客 户 端
public class TCPClient {
public static void main(String[] args) throws Exception {
// 创 建一个客 户 端,指定服 务 器端的 IP 地址和端口号,即具体 连 接 “ 对 象 ”
Socket s = new Socket( "127.0.0.1" ,6666);
}
}
弊端:Server提供一次服务后,就结束了
改进: TCPServer .java 持续服务(使用 While 死循环)
package
com.javaeye.kang.socket;
import java.net.ServerSocket;
import java.net.Socket;
//Socket 服 务 器端
public class TCPServer {
public static void main(String[] args) throws Exception {
// 创 建一个 Socket 服 务 器端, 带 有端口号(能 让 客 户 端能具体 连过 来)
ServerSocket ss = new ServerSocket(6666);
//Server 端 傻 等 ,死循环
while(true) {
Socket s = ss.accept();
System.out.println("a client accept!");
}
}
}
客户端连上服务器端后,向服务器端发消息。
TCPServer .java
package
com.javaeye.kang.socket;
import java.io.DataInputStream;
import java.net.ServerSocket;
import java.net.Socket;
//Socket 服 务 器端
public class TCPServer {
public static void main(String[] args) throws Exception {
// 创 建一个 Socket 服 务 器端, 带 有端口号(能 让 客 户 端能具体 连过 来)
ServerSocket ss = new ServerSocket(6666);
//Server 端 傻 等,死循 环
while ( true ) {
// 阻塞式 傻 等
Socket s = ss.accept();
// 服 务 器端接收数据,作 为输 入流
DataInputStream dis = new DataInputStream(s.getInputStream());
// 读 出 输 入流中的数据, readUTF 也是阻塞式 傻 等
System. out .println(dis.readUTF());
// 关闭 管道
dis.close();
}
}
}
TCPClient .java
package
com.javaeye.kang.socket;
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.Socket;
//Socket 客 户 端
public class TCPClient {
public static void main(String[] args) throws Exception {
// 创 建一个客 户 端,指定服 务 器端的 IP 地址和端口号,即具体 连 接 “ 对 象 ”
Socket s = new Socket( "127.0.0.1" ,6666);
// 客 户 端 说话 ,作 为输 出流
OutputStream os = s.getOutputStream();
// 套管道
DataOutputStream dos = new DataOutputStream(os);
// 客 户 端 说话
dos.writeUTF( "Hello Server!" );
dos.flush();
// 最后 关闭
dos.close();
os.close();
}
}
先启动那个服务器端,见图 2
再运行客户端,运行一次,往服务器端写一句话。见图 3
这个程序的问题:如果有一个客户端连上来的时候,进入 while ,但是并没有立即利用服务(向服务器端写数据),此时就导致别的客户端就连不上来了。这样的 TCP Server 是有问题的。以前一直是同步 IO ,这个在处理 TCP Server 是有问题的( C 和 C++ 在 TCP Server 端比较棒!)。不过,现在 Java 已经开始提供异步 IO 了。
说明:必须先起 Server 服务,再起 Client ,否则肯定会报连接错误。见图 1
-》这个报错信息也很自然,你服务器端的Server服务还没启动,你让人家Client连接谁呀?(20090507追加)
最后
以上就是美满红酒为你收集整理的Socket编程初步(单向通信)的全部内容,希望文章能够帮你解决Socket编程初步(单向通信)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复