java 网络编程 TCP协议 java 服务器和客户端 java socket编程
一个 HelloWord 级别的 Java Socket 通信的例子。通讯过程:
先启动 Server 端,进入一个死循环以便一直监听某端口是否有连接请求。然后运行 Client 端,客户端发出连接请求,服务端监听到这次请求后向客户端发回接受消息,连接建立,启动一个线程去处理这次请求,然后继续死循环监听其他请求。客户端输入字符串后按回车键,向服务器发送数据。服务器读取数据后回复客户端数据。这次请求处理完毕,启动的线程消亡。如果客户端接收到 "OK" 之外的返回数据,会再次发送连接请求并发送数据,服务器会为这次连接再次启动一个线程来进行响应。。。直到当客户端接收到的返回数据为 "OK" 时,客户端退出。
Java中重点之一就是服务器与客户端的连接,因为是在同一台PC上,所以就设置服务器的地址为“localhost”,注意,我当时试着设置其他名称,但都不行,这个原因还请老司机告一下。另外还要注意,服务端先于客户端运行,废话不多说,上代码了:
客户端:
按 Ctrl+C 复制代码
package WebProgramingDemo;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketDemo {
/**
* @param args
* @throws IOException
* @throws UnknownHostException
*/
public static void main(String[] args) throws IOException {
Socket s=new Socket("192.168.2.103",10002);
OutputStream out=s.getOutputStream();
out.write("Java".getBytes());
InputStream is=s.getInputStream();
byte buf[]=new byte[1024];
int len=is.read(buf);
System.out.println(new String(buf,0,len));
s.close();
}
}
按 Ctrl+C 复制代码
服务端:
按 Ctrl+C 复制代码
package WebProgramingDemo;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerSocketDemo {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10002);
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip + "....connected....");
InputStream in = s.getInputStream();
int len = 0;
byte[] buf = new byte[1024];
len = in.read(buf);
System.out.println(new String(buf, 0, len));
OutputStream os=s.getOutputStream();
os.write("收到".getBytes());
os.close();
s.close();
ss.close();
}
}
按 Ctrl+C 复制代码
http://www.cnblogs.com/ysw-go/p/5323357.html
服务器修改后的代码:
package test;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class ServerSocketDemo {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10002);
Socket s = ss.accept();
while(true)
{
String ip = s.getInetAddress().getHostAddress();
// System.out.println(ip + "....connected....");
InputStream in = s.getInputStream();
int len = 0;
byte[] buf = new byte[1024];
len = in.read(buf);
System.out.println(new String(buf, 0, len));
OutputStream os=s.getOutputStream();
Scanner scan=new Scanner(System.in);
String s1=scan.next();
os.write(s1.getBytes());
// os.write("收到".getBytes());
// os.close();
// s.close();
// ss.close();
}
}
}
客户端代码修改后:
package test2;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class SocketDemo {
/**
* @param args
* @throws IOException
* @throws UnknownHostException
*/
public static void main(String[] args) throws IOException {
Socket s=new Socket("localhost",10002);
while(true)
{
OutputStream out=s.getOutputStream();
Scanner scan=new Scanner(System.in);
String s1=scan.next();
out.write(s1.getBytes());
//out.write(s1.getBytes());
InputStream is=s.getInputStream();
byte buf[]=new byte[1024];
int len=is.read(buf);
System.out.println(new String(buf,0,len));
// s.close();
}
}
}
服务器先开启,然后开启客户端,然后客户必须先发消息用套子链接服务器,然后服务器才发消息回馈客户端。一次通信结束。客户端的输出对应服务器的输入,服务器的输出对应客户端的输入。
java 网络编程 TCP协议 java 服务器和客户端 java socket编程的更多相关文章
- Java网络编程(TCP协议-服务端和客户端交互)
客户端: package WebProgramingDemo; import java.io.IOException; import java.io.InputStream; import java. ...
- 网络编程TCP协议-聊天室
网络编程TCP协议-聊天室(客户端与服务端的交互); <span style="font-size:18px;">1.客户端发数据到服务端.</span> ...
- 网络编程——TCP协议、UDP协议、socket套接字、粘包问题以及解决方法
网络编程--TCP协议.UDP协议.socket套接字.粘包问题以及解决方法 TCP协议(流式协议) 当应用程序想通过TCP协议实现远程通信时,彼此之间必须先建立双向通信通道,基于该双向通道实现数 ...
- 使用java语言基于SMTP协议手写邮件客户端
使用java语言基于SMTP协议手写邮件客户端 1. 说明 电子邮件是互联网上常见的应用,他是互联网早期的产品,直至今日依然受到广大用户的喜爱(在中国可能因为文化背景不同,电子邮件只在办公的时候常用) ...
- netty源码解解析(4.0)-20 ChannelHandler: 自己实现一个自定义协议的服务器和客户端
本章不会直接分析Netty源码,而是通过使用Netty的能力实现一个自定义协议的服务器和客户端.通过这样的实践,可以更深刻地理解Netty的相关代码,同时可以了解,在设计实现自定义协议的过程中需要解决 ...
- 一个基于TCP/IP的服务器与客户端通讯的小项目(超详细版)
1.目的:实现客户端向服务器发送数据 原理: 2.建立两个控制台应用,一个为服务器,用于接收数据.一个为客户端,用于发送数据. 关键类与对应方法: 1)类IPEndPoint: 1.是抽象类EndPo ...
- 客户端验证、tcp协议中多个客户端的同时在线
一.客户端验证 当在一个局域网内需要验证是否为合法的客户端连接时,我们需要写代码进行验证. Server端 import os import hmac import socket def auth(c ...
- POCO库中文编程参考指南(8)丰富的Socket编程
POCO库中文编程参考指南(8)丰富的Socket编程 作者:柳大·Poechant 博客:Blog.CSDN.net/Poechant 邮箱:zhongchao.ustc#gmail.com (# ...
- Java:基于TCP协议网络socket编程(实现C/S通信)
目录 一.前言:TCP原理简介 二.Socket编程通信 三.TCP服务器端(具体代码) 四.TCP客户端(具体代码) 五.通信效果演示 六."创意"机器人:价值一个亿的AI核心代 ...
随机推荐
- 在使用IWMS的时候,IWMS自带函数样式无法满足我们需求。以下一段JS是实现左图右字的适用于IWMS的代码。
<div class="wz-list">里边需要有html做好的Html代码样式</div> <script> var attrnew = & ...
- qtp 自动货测试桌面程序-笔记(使用参数 parameters)
dtGlobalSheet:运行整个test时候使用的参数(心得:可以将公共使用的测试数据放于全局表格中,所有action脚本都可以使用同一个数据,如供应商.客户.商品) dtActionSheet: ...
- Membership 介绍
ASP.NET成员资格为您提供了验证和存储用户凭据的内置方式.因此,ASP.NET成员可以帮助您管理网站中的用户身份验证.您可以使用ASP.NET表单身份验证使用ASP.NET成员身份,方法是使用AS ...
- codeforces362B
Petya and Staircases CodeForces - 362B 题意: 一个小男孩要上楼梯,他一次可以走1个台阶或2个台阶或3个台阶,但是有一些台阶是脏的,他不想走在脏台阶上.一共有n个 ...
- django-admin和manage.py
目录 一.Django内置命令选项 check dbshell diffsettings flush makemigrations migrate runserver shell startapp s ...
- Python字符串和列表的内置方法
一.字符串内置方法 1.strip() 删除开头和结尾的字符串 s.strip(rm) 删除s字符串中开头,结尾处,位于rm删除序列的字符串 s.lstrip(rm) 删除s字符串中开头位于rm删除 ...
- yoj维护
维护 启动容器 docker start yoj 暂停容器 docker stop yoj 重启容器 docker restart yoj 进入容器的终端 docker attach yok 保存容器 ...
- Gogs 部署安装(Linux)
环境 centos7:golang+mysqldb+git. 安装配置环境[mysql装了请跳过] yum install mysql-community-server go git -y 配置防火墙 ...
- 【JVM】查看JVM加载的类及类加载器的方法
查看JVM加载了哪些类 java -verbose[:class|gc|jni] 在输出设备上显示虚拟机运行信息. java -verbose:class 在程序运行的时候有多少类被加载!你可以用ve ...
- [2017-7-26]Android Learning Day4
RecycleView 恩,学习Fragment的过程中的一个小实践居然用到了RecycleView!坑了我好久有木有!!好气哦,从昨晚到现在.(现在也还是一头雾水,不过照搬也会用了) 这是第一版的代 ...