青鸟菜鸟,请教各位网络编程大侠们,初学Socket,客户端/服务器端不能交互,指点菜鸟一下

zjkaz1232009tm 2011-05-11 09:56:53
package server;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;




/**
*
* 服务器端
* @author Administrator
*
*/
public class EchoServer {



//定义 监听端口
public static final int PORT=8081;
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//建立ServerSocket对象, 监听端口号为8080
ServerSocket server = new ServerSocket(PORT);
System.out.println("服务器启动:" + server);
try {
//服务器启动监听, 等待客户连接
Socket socket = server.accept();

try {
System.out.println("建立连接: " + socket);
//获取Socket输入流(读取流), 并用BufferedReader包装
BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
//获得Socket输出流(写入流), 并用PrintWriter包装
PrintWriter writer = new PrintWriter(socket.getOutputStream(),
true);

//使用无限循环
while (true) {
//在输入流(读取流)中每次读入一行数据,
String string = reader.readLine();
//如果输入流 读取到 end 字符串 就结束
if (string.equals("end")) {
break;
}
//并输入控制台,
System.out.println("来自 客户端---->:" + string);

//同时把数据在写入输出流(写入流),返回客户端
writer.println(string);
}

}
finally {
System.out.println("关闭连接");
socket.close();
}

}finally {
System.out.println("关闭服务器");
server.close();
}
}
}

------------------------------------------------------------------------------------------------------------

package client;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

import com.sun.corba.se.spi.orbutil.fsm.Input;



/**
*
* 客户端
* @author Administrator
*
*/
public class Client {

///定义 服务器主机名(localhost)
private static String serverAddress="localhost";
///定义 服务器端口(8080), 注意不能使用
private static int port=8081;



/**
* @param args
* @throws IOException
* @throws UnknownHostException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub

//创建Socket对象
Socket socket=new Socket(serverAddress,port);


try {
//输出socket信息, 包括 主机地址 和 端口号信息
System.out.println("socket=" + socket);

//获取Socket对象的输入流,并用BufferedReader缓冲, 以便于调用ReaderLine() 方法一次一行
//地读入输入流数据
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//获取输出流
//true: 没写入一行数据 就清空缓冲
PrintWriter writer=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);

System.out.println("客户端 的 用户 请输入传递数据:");
BufferedReader localreader=new BufferedReader(new InputStreamReader(System.in));
String msg=null;

while ((msg=localreader.readLine())!=null){
//把每次读到的数据 写入 输出流中
writer.print(msg);
//从输入流中读取服务器 返回数据
System.out.println("从 服务器---->:" + reader.readLine());

//如果控制输入的"END", 则跳出While循环, 断开连接
if(msg.equals("end")){
break;
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
System.out.println("关闭连接");
try {
socket.close();
} catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}
}



}

}
------------------------------------------------------------------------------------------------------




全套代码, 我能意识到的是, 原先我那个 笔记本 没有连通 互联网,网络标识 红 X
能意识到的 就是 这个 问题 ,请问 网络编程高手们 懂Socket的指点迷津
本人 初学 Socket,不懂的还请各位 指点,这个的用处


...全文
72 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjkaz1232009tm 2011-05-12
  • 打赏
  • 举报
回复
magong
magong
magong
magong
三藏法师,你最棒了,搞定,就是那个问题,高手指点,一针见血,谢谢高手指点
new_bird_0001 2011-05-11
  • 打赏
  • 举报
回复
你的服务器在8080端口监听,你的客户端却要去连接8081端口,这样能连上吗?好好看看帮助:
构造方法摘要
Socket()
通过系统默认类型的 SocketImpl 创建未连接套接字
Socket(InetAddress address, int port)
创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
Socket(InetAddress host, int port, boolean stream)
已过时。 Use DatagramSocket instead for UDP transport.
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
创建一个套接字并将其连接到指定远程地址上的指定远程端口。
Socket(Proxy proxy)
创建一个未连接的套接字并指定代理类型(如果有),该代理不管其他设置如何都应被使用。
protected Socket(SocketImpl impl)
使用用户指定的 SocketImpl 创建一个未连接 Socket。
Socket(String host, int port)
创建一个流套接字并将其连接到指定主机上的指定端口号。
Socket(String host, int port, boolean stream)
已过时。 使用 DatagramSocket 取代 UDP 传输。
Socket(String host, int port, InetAddress localAddr, int localPort)
创建一个套接字并将其连接到指定远程主机上的指定远程端口。
magong 2011-05-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 zjkaz1232009tm 的回复:]
//把每次读到的数据 写入 输出流中
writer.print(msg);
//从输入流中读取服务器 返回数据
[/Quote]
客户端代码中,
这里的print要改成println,

因为Server端用readLine读,两边要对应。
zjkaz1232009tm 2011-05-11
  • 打赏
  • 举报
回复
我刚才发帖者没说重点: 我先打开 服务器程序, 在打开客户端程序,然后 从控制台 输入字符串(String str),可是服务器好像没数据,客户端也没数据,没做到交互,差不多能体会到的就这些,上面是全部源码,指点的高手,可用本机实验一下?

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧