A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵志勇 中级黑马   /  2012-5-23 20:14  /  2277 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

各位大虾,是不是建立tcp 的socket成功时,就可以自动的向目标地址发送数据??
import java.io.*;
import java.net.*;
class TcpClient
{
public static void main(String[] args) throws Exception
{
  Socket s=new Socket("192.168.0.107",10003);
  OutputStream out=s.getOutputStream();
  out.write("哥们来了".getBytes());
  s.close();
}
}
class TcpServer
{
public static void main(String[] args)throws Exception
{
  ServerSocket ss=new ServerSocket(10003);
  Socket s=ss.accept();
  InputStream in=s.getInputStream();
  byte[] buf=new byte[1024];
  int len=in.read(buf);
  System.out.println(new String(buf,0,len));
  String ip=s.getInetAddress().getHostAddress();
  System.out.println(ip+"....conect");
  s.close();
  ss.close();
}
}
这代码中的客户端没有发送的方法,请问它是怎么发送到服务端的??

7 个回复

倒序浏览
  1. class TcpClient
  2. {
  3. public static void main(String[] args) throws Exception
  4. {
  5.   Socket s=new Socket("192.168.0.107",10003);//在这里创建Socket的时候客户端就已经去访问服务端了,通过ip,端口号去访问
  6.   OutputStream out=s.getOutputStream();
  7.   out.write("哥们来了".getBytes());
  8.   s.close();
  9. }
  10. }
  11. class TcpServer
  12. {
  13. public static void main(String[] args)throws Exception
  14. {
  15.   ServerSocket ss=new ServerSocket(10003);//这里的端口号跟上面的要一致
  16.   Socket s=ss.accept();//这个是一个阻塞似方法,如果没人访问的话一直在这里停着,有人一访问就获取Socket开始执行下面的,
  17.   InputStream in=s.getInputStream();
  18.   byte[] buf=new byte[1024];
  19.   int len=in.read(buf);
  20.   System.out.println(new String(buf,0,len));
  21.   String ip=s.getInetAddress().getHostAddress();
  22.   System.out.println(ip+"....conect");
  23.   s.close();
  24.   ss.close();
  25. }
  26. }
  27. 这代码中的客户端没有发送的方法,请问它是怎么发送到服务端的??
复制代码

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
Socket s=new Socket("172.168.1.124",10000)所传的参数就是要连接的服务端
回复 使用道具 举报
通信原理首先启动服务端 ServerSocket ss=new ServerSocket(10003);
   Socket s=ss.accept();为一个阻塞时方法  当客户端执行Socket s=new Socket("192.168.0.107",10003);
时  客户端和服务端就建立了连接 两者之间 就可以进行数据间的传递了
回复 使用道具 举报
TCP是面向连接的服务,它分服务端与客户端,在进行tcp通信之前,先必须经过四个步骤:
1.Socket和ServerSocket
2.建立客服端与服务端
3.建立连接后,通过Socket中的io流进行数据的传输
4.关闭socket
只有在客户端与服务端成功创建连接,形成通信通道后,才能进行数据的发送,而并非建立tcp 的socket成功时,就可以自动的向目标地址发送数据。
客户端向服务端 发送数据是按照下面的过程进行:
1.创建客户端的socket服务、指定目的主机和端口
         Socket s=new Socket("192.168.1.107",10003);
2.为了发送数据,客户端应该获取socket流中的输出流
                OutputStream out=s.getOutputStream();
                out.write("ecp ge men lai le".getBytes());
                s.close();
3.建立服务端socket服务,并监听一个端口
    ServerSocket ss=new ServerSocket(10003);
4.通过accept方法获取连接过来的客户端对象
    Socket s=ss.accept();
客户端与服务端是通过相同的端口来建立通信的,建立连接后,客户端将要发送的数据写入到输出流中,服务端通过accept()方法获取连接过来的客户端对象。并通过客户端对象的读取流来读取对象,将流中的数据读出来

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
万章云 发表于 2012-5-23 21:05
TCP是面向连接的服务,它分服务端与客户端,在进行tcp通信之前,先必须经过四个步骤:
1.Socket和ServerS ...

是不是只要向客户端的输出流中写入数据后,这些数据就传到服务端?如果不向输出流中写入数据就不能传到服务端呢?我的理解对吗?
回复 使用道具 举报
彩虹 中级黑马 2012-5-23 21:26:43
7#
赵志勇 发表于 2012-5-23 21:10
是不是只要向客户端的输出流中写入数据后,这些数据就传到服务端?如果不向输出流中写入数据就不能传到服 ...

      嗯!是的,因为一旦客户端与服务端建立连接后就相当于形成了一个管道,跟水管相似,正要有水源,管道的另一端就能取水,但也可能发生管道阻塞的状态
回复 使用道具 举报
万章云 发表于 2012-5-23 21:26
嗯!是的,因为一旦客户端与服务端建立连接后就相当于形成了一个管道,跟水管相似,正要有水源,管 ...

彻底明白,水管道真的很形象。谢谢啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马