网络编程之TCP
TCP编程中,如果要完成通信,通信双方必须要创建socket,通过socket完成通信。
TCP通信步骤
1、服务器启动ServerSocket作为通信的Server端,等待客户端链入。
2、 客户端创建Socket作为通信的Client端
3、Client端链入Server端后建立可靠的、双向的、持续性的、点对点的通讯连接,即可通信。
TCP服务器和客户端的基本创建如下:
服务器:
public static void main(String[] args) {
System.out.println("服务器启动。。。");
try {
//1.创建服务器
ServerSocket serverSocket=new ServerSocket(9000);
//2.连接客户端
Socket accept = serverSocket.accept();
System.out.println(accept.getInetAddress().getHostAddress()+"连入!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
客户端:
public static void main(String[] args) {
System.out.println("客户端运行。。。");
try {
//1.创建客户端
Socket socket=new Socket("192.168.2.241",9000);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
客户端向服务器发送一条信息如下:
服务器:
public static void main(String[] args) {
System.out.println("服务器启动。。。");
try {
//1.创建服务器
ServerSocket serverSocket=new ServerSocket(9000);
//2.连接客户端
Socket accept = serverSocket.accept();
System.out.println(accept.getInetAddress().getHostAddress()+"连入!");
//3.读取客户端发来的信息
InputStream inputStream = accept.getInputStream();
int len;
byte[] buf=new byte[1024];
len = inputStream.read(buf);
String string=new String(buf, 0, len, "UTF-8");
System.out.println("客户端向服务器发来的信息:"+string);
//关闭通道
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
客户端:
public static void main(String[] args) {
System.out.println("客户端运行。。。");
try {
//1.创建客户端
Socket socket=new Socket("192.168.2.241",9000);
//2.向服务器发送数据
OutputStream outputStream=socket.getOutputStream();
String string="Ig niubi";
byte[] buf=string.getBytes("UTF-8");
outputStream.write(buf);
socket.shutdownOutput();
System.out.println("信息发送完成!");
outputStream.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
常见问题:
1、端口被占用

2、服务器未启动

3、连接超时异常,SocketTimeoutException
当网速很慢时,可能发生连接超时异常。
4.输出流没有close()或者没有flush()


浙公网安备 33010602011771号