黑马程序员技术交流社区
标题:
Socket学习的问题
[打印本页]
作者:
曹昌豪
时间:
2012-6-1 10:15
标题:
Socket学习的问题
习Socket的时候,用自己的电脑写的Socket和ServerSicket可以发送和接收消息吗
一运行就会抛ConnectException,该怎么解决呢
作者:
黑马—陈磊
时间:
2012-6-1 11:12
该异常发生在客户端进行new Socket(ip, port)操作时,该异常发生的原因是或者具有ip地址的机器不能找到,或者是该ip存在,但找不到指定的端口进行监听。出现该问题,首先检查客户端的ip和port是否写错了,如果正确则从客户端ping一下服务器看是否能ping通,如果能ping通(服务服务器端把ping禁掉则需要另外的办法),则看在服务器端的监听指定端口的程序是否启动。
贴一个我收藏的Socket编程简单例子:
注释: Socket-->亦称作"套接字",是java网络编程基础,用来描叙IP地址和端口。
Socket:建立网络连接时使用.
ServerSocket:用于服务器端.
[一个简单的单线程的"Client-Server"例子]
Server(服务器端):使用ServerSocket监听指定的端口,等待客户连接请求,客户连接后,会话产生.
Client(客户端):使用Socket对服务器的端口发出连接请求,一旦连接成功,打开会话.
***********************Server********************
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server{
public static void main(String []args){
try{
ServerSocket ss = new ServerSocket(8099);
System.out.println("服务器已启动,等到客户端的连接...");
Socket socket = ss.accept();// -->服务器收到客户端的数据后,创建与此客户端对话的Socket
DataInputStream in=new DataInputStream(socket.getInputStream());
// -->用于接收客户端 发来的数据的输入流
System.out.println("服务器接受到客户端的连接请求:"+in.readUTF());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeUTF("接受连接请求,连接成功");
socket.close();
ss.close();
}catch(Exception e){
e.printStackTrace(); }
}
}
*************************Client******************************
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
public class Client{
public static void main(String []args){
try{
Socket socket = new Socket("localhost",8099);
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeUTF("客户端请求服务器的连接...");
DataInputStream in = new DataInputStream(socket.getInputStream());
System.out.println(in.readUTF()); socket.close();
}catch(Exception e){
e.printStackTrace();
}
}
} //注释:8099-->自定义端口,最好大于1024均可
作者:
刘伯阳
时间:
2012-6-1 11:31
是可以的,但是要注意以下几点:
1、Socket(ip,port) 这个ip必须填写本机ip(127.0.0.1) port必须没有被使用(一般前1024留给系统使用)
2、ServerSocket(port) port必须与Socket的端口一致
3、必须先运行服务器端(Server)再运行客户端(Client),没有服务器,客户端找谁连接呢?
作者:
黑马11期李项京
时间:
2012-6-1 12:31
操作方法:启动两个命令行窗口或者两个eclipse窗口,先运行服务器类,再运行客户端类。具体代码如下
/*
演示TCP传输
1、TCP分客户端和服务端
2、客户端对应的对象是Socket
服务端对应的对象是ServerSocket
*/
/*
客户端
通过查阅Socket对象,发现在该对象建立时,就可以连接指定主机
因为TCP是面向连接的,所以在建立Socket服务时,就要有服务端存在,并连接成功,形成通路后,在该通道进行数据的传输
步骤:
1、创建Socket服务,并指定要连接的主机和端口
*/
import java.io.*;
import java.net.*;
class TCPClient
{
public static void main(String[] args) throws Exception
{
//创建客户端的Socket服务,指定目的主机和端口
Socket s=new Socket("",1002);
//为了发送数据,应该获取socket流中的输出流
OutputStream out=s.getOutputStream();
out.write("TCP ge men lai le ".getBytes());
s.close();
}
}
/*
需求:定义端点接收数据并打印在控制台上
服务端:
1、建立服务端的Socket服务,ServerSocket();
并监听一个端口
2、获取连接过来的客服端对象
通过ServerSocket的accept方法,没有连接就会等,所以这个方法阻塞式的
3、客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据
并打印在控制台
4、关闭服务端(可关可不关)
*/
class TCPServer
{
public static void main(String[] args)throws Exception
{
//建立服务端Socket服务,并监听一个端口。
ServerSocket ss=new ServerSocket(1002);
//通过accept方法获取连接过来的客户端对象
Socket s=ss.accept();
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+"....connected");
//获取客户端发送过来的数据,那么要使用客户端对象的读取来读取数据
InputStream in=s.getInputStream();
byte[] buf=new byte[1024];
int len=in.read(buf);
System.out.println(new String(buf,0,len));
s.close();//关闭客户端
ss.close();
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2