tcp servet服务器tcp业务是什么意思思

java TCP/IP入门代码 SocketServer与Socket - 为程序员服务
为程序员服务
java TCP/IP入门代码 SocketServer与Socket
java网络编程主要包含4部分: (注意设置超时时间)
URL 连接 :类URL代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。
HttpURLConnection连接:相当于servlet,发送单个以post或get方式的请求,
TCP/IP连接 可靠传输ServerSocket类 。 1).入门案例。 2).多线程阻塞式通讯。
阻塞式:比如recv某个socket的描述符,如果没有数据到,一直停在recv的状态,不释放socket资源,叫阻塞
UDP连接 DatagramSocket 类, 此类表示用来发送和接收数据报包的套接字。
TCP/IP 连接 Server服务器端
import java.io.BufferedInputS
import java.io.BufferedR
import java.io.BufferedW
import java.io.IOE
import java.io.InputS
import java.io.InputStreamR
import java.io.OutputStreamW
import java.net.ServerS
import java.net.S
*@ClassName:Server
*@author: chenyoulong
*@date : 上午10:35:09
*@Description:TODO
public class SendServer {
* @throws IOException
* @Title: main
* @Description: TODO
* @param @param args
* @return void
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
ServerSocket server=new ServerSocket(8888);
System.out.println(&server start&);
Socket sock=server.accept();
sock.setSoTimeout(6000);
//服务器端设置连接超时时间,该操作只对读取(read)操作有效。
//字节流的形式读取
// 优缺点分析,弱点:受byte[]大小的限制
,优点:不受回车符(\r)和换行符(\n)限制
InputStream input=sock.getInputStream();
byte[] buf =new byte[1024];
System.out.println(&InputStream===&+input);
if(input!=null){
int len=input.read(buf);
ToolKit.writeLog(SendServer.class.getName(), &服务器端收到的报文:\n&+new String(buf, 0, len));
/* //字符流的形式读取
//(遇到换行符或者回车符就终止,还是谨慎使用)
BufferedReader read=new BufferedReader(new InputStreamReader(sock.getInputStream()));
String readStr=
if((readStr=read.readLine())!=null){
ToolKit.writeLog(Server.class.getName(), &服务器端收到的报文:\n&+readStr);
if(read!=null) read.close();
String outStr=&我是server服务器端&;
BufferedWriter write=new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
if(outStr!=null){
write.write(outStr);
if(write!=null) write.close();*/
//挂关闭资源
if(sock!=null) sock.close();
if(server!=null) server.close();
TCP/IP连接 Client客户端
import java.io.BufferedInputS
import java.io.BufferedOutputS
import java.io.IOE
import java.net.S
import java.net.UnknownHostE
import org.apache.log4j.L
*@ClassName:ReceiveClient
*@author: chenyoulong
*@date : 下午2:17:26
*@Description:TODO
public class ReceiveClient {
private final String IP=Setting.RECEIVE_IP;
private final int PORT=Setting.RECEIVE_PORT;
Logger log = Logger.getLogger(Sender.class.getName());
* @throws Exception
* 发送报文
* @Title: send
* @Description: TODO
* @param @param reqMessage
* @return void
public void send(String reqMessage) throws Exception{
Socket sock=
BufferedOutputStream out=
sock=new Socket();
SocketAddress sockAdd=new InetSocketAddress(IP, PORT);
sock.connect(sockAdd, 2000); //客户端设置连接建立超时时间
out=new BufferedOutputStream(sock.getOutputStream());
out.write(reqMessage.getBytes());
out.flush();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
log.error(&网络连接异常&+Strings.getStackTrace(e));
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
log.error(&网络连接异常\n&+Strings.getStackTrace(e));
e.printStackTrace();
if(out!=null){
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if(sock!=null){
sock.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
public String
reiceve() throws Exception{
Socket sock=
BufferedInputStream in=
sock=new Socket(IP,PORT);
in = new BufferedInputStream(sock.getInputStream());
if ((sock == null) || (in == null)) {
throw new Exception(&套接口无效,无法读取数据&);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
byte[] bts = new byte[10000];
int totalLen = 0, len = 0;
while ((len = in.read(bts, totalLen, 1000)) != -1) {
totalLen +=
String result = new String(bts);
//注意字符编码
return result.trim();
//main函数示例
public static void main(String[] args){
//发送报文
String str=&我是客户端!&
new ReceiveClient().send(str);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
//接收报文
String recStr=new Receiver().reiceve();
System.out.println(&客户端接收到的结果==&+recStr);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
TCP/IP连接多线程阻塞式服务端1——实现runnable接口
import java.io.BufferedR
import java.io.IOE
import java.io.InputS
import java.io.InputStreamR
import java.net.S
*@ClassName:ThreadSocket
*@author: chenyoulong
*@date : 上午10:00:41
*@Description:TODO
public class ThreadSocket implements Runnable {
public ThreadSocket(Socket sock){
this.sock=
* &p&Title: run&/p&
* &p&Description: &/p&
* @see java.lang.Runnable#run()
public void run() {
// TODO Auto-generated method stub
InputStream input=
input = sock.getInputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//字符流的形式读取(遇到换行符或者回车符就终止,还是谨慎使用)
BufferedReader read=new BufferedReader(new InputStreamReader(input));
String readStr=
if((readStr=read.readLine())!=null){
System.out.println(&服务器端收到的报文:\n&+readStr);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if(read!=null) {
read.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
byte[] buf = new byte[1024];
if (input != null) {
int len=0;
len = input.read(buf);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println(&服务器端收到的报文:\n&+ new String(buf, 0, len));
TCP/IP连接多线程阻塞式服务端2——main函数
import java.io.IOE
import java.net.ServerS
import java.net.S
*@ClassName:OnRunSendServer
*@author: chenyoulong
*@date : 上午10:06:28
*@Description:TODO
public class OnRunSendServer {
* @throws IOException
* @Title: main
* @Description: TODO
* @param @param args
* @return void
public static void main(String[] args)
// TODO Auto-generated method stub
ServerSocket server =
server = new ServerSocket(8888);
System.out.println(&send服务器start!&);
Socket sock =
while (true) {
sock = server.accept();
sock.setSoTimeout(12000);//设置读取连接超时时间
ThreadSocket tsock = new ThreadSocket(sock);
new Thread(tsock).start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}/*finally{
//这里还是不要finally关闭ServerSocket为好,防止某个socket连接超时导致整个ServerSocket都关闭了。
server.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
您可能的代码
相关聚客文章
相关专栏文章&&&&真正无锁IOCP回射服务器(IOCP Tcp EchoServer)
真正无锁IOCP回射服务器(IOCP Tcp EchoServer)
基于IOCP模型的无锁0内核态TCP通讯服务器引擎(IOCPTCP Server)
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
开发技术下载排行怎么启用SQL Server 2008 R2的TCP/IP协议? - 用友财务软件免费版下载
<META name="Description" content="TCP/IP协议是数据库的一个连接协议,学习如何启用SQL SERVER 2008 R2的TCP/IP协议,便于大家后续使用用友工具,及解决客户端连接服务器时会提示1433端口不通等问题,比如像早期的用友通T3版本,客户端连接服务器时,服务器如果安装的是sql 2005数据库,那么一定要去开启TCP/IP协议,否则肯定会提示1433端口不通。" />
温馨提示:请使用IE浏览器打开本站,否则可能看不到下载地址!QQ群:
您的位置: : &
& &&&&&&&&用友QQ交流群:(密:ufsoft)
TCP/IP协议是数据库的一个连接协议,学习如何启用SQL SERVER 2008 R2的TCP/IP协议,便于大家后续使用用友工具,及解决客户端连接服务器时会提示1433端口不通等问题,比如像早期的用友通T3版本,客户端连接服务器时,服务器如果安装的是sql 2005数据库,那么一定要去开启TCP/IP协议,否则肯定会提示1433端口不通。
TCP/IP协议是数据库的一个连接协议,这个协议如果不打开,有一些用友工具就没办法使用,或者在客户端连接服务器时会提示1433端口不通,比如像早期的用友通T3版本,客户端连接服务器时,服务器如果安装的是,那么一定要去开启TCP/IP协议,否则肯定会提示1433端口不通。所以今天网站给大家带来的是如何启用SQL SERVER 2008 R2的TCP/IP协议(SQL 2005以上版本数据库都可以参照这篇文章进行操作)1、单击&开始&-&程序&-&Microsoft SQL Server 2008 R2&-&配置工具&-&SQL Server 配置管理器&-&SQL SERVER 网络配置&-找到安装的数据库实例名,如下图中的是MSSQLSERVER默认实例,那么选中&MSSQLSERVER的协议&,右侧右击TCP/IP,选择&启用&,提示框中选择&确定&。2、当TCP/IP显示&已启用&后,单击&SQL Server 服务&-右击&SQL Server(MSSQLSERVER)&-选择&重新启动&。以上是网提供给大家的关于怎么启用SQL Server 2008 R2的TCP/IP协议?的文字教程。大家在操作时有任何疑问可以随时给我们的QQ客服:提问。论坛地址: 。
如果你有安装和使用问题需要咨询请点击到: 中咨询和讨论,技术维护类问题请访问查询,或者加用友2000人QQ交流群:,密码:ufsoft进行咨询,如果看不到下载地址,请用IE浏览器打开本页面,如果您不会下载请点击查看:,照文章说明下载免费的用友软件即可。
相关文章列表:
用友软件下载SQL数据库下载用友安装教程温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
code :& widget.cpp& #include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent) ://widget 构造函数& 。& 每个对象都需要有一个构造函数&&& QWidget(parent),&&& ui(new Ui::Widget){&&& ui-&setupUi(this);&&& totalBytes = 0;&&& bytesReceived = 0;&&& fileNameSize = 0;&&& connect(&tcpServer,SIGNAL(newConnection()),this,SLOT(acceptConnection()));&&& //当发现新连接时发出newConnection()信号&&& //tcpServer收到newConnection()信号时,转到槽函数实现acceptConnection();& 表示接受到连接的信号。& }//(2)实现start()函数。void Widget::start() //开始监听{&&& ui-&startButton-&setEnabled(false);&&& bytesReceived =0;&&& if(!tcpServer.listen(QHostAddress::LocalHost,6666))//监听本地主机IP 和 端口号6666&&& {&&&&&&& qDebug() && tcpServer.errorString();&&&&&&& close();&&&&&&&&&& }//监听函数//bool QTcpServer::listen ( const QHostAddress & address = QHostAddress::Any, quint16 port = 0)//Tells the server to listen for incoming connections on address address and port port. If port is 0, a port is chosen automatically. If address is//QHostAddress::Any, the server will listen on all network interfaces.//Ret otherwise returns false.&&& ui-&serverStatusLabel-&setText(tr("监听"));}//(3)实现接受连接函数。void Widget::acceptConnection()& //接受连接{&&& tcpServerConnection = tcpServer.nextPendingConnection();//tcpServerConnection 是tcpsocket类的一个对象。 nextPendingConnection()指向下一个即将连接的信号。& connect(tcpServerConnection,SIGNAL(readyRead()),this,SLOT(updateServerProgress()));//tcpServerConnection如果接受到信号readyRead(),就转到槽函数updateServerProgress(),更新服务器的进程。& connect(tcpServerConnection,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(displayError(QAbstractSocket::SocketError)));//tcpServerConnection如果接受到信号error(QAbstractSocket::SocketError),则转到槽函数displayError(QAbstractSocket::SocketError))显示错误信息。& ui-&serverStatusLabel-&setText(tr("接受连接"));//显示服务器状态为接受连接。 &&& tcpServer.close();//关闭服务器,服务器不再接受下一个连接的信号。Closes the server. The server will no longer listen for incoming connections.}//(4)实现更新进度条函数。void Widget::updateServerProgress()& //更新进度条,接收数据{&& QDataStream in(tcpServerConnection);&& in.setVersion(QDataStream::Qt_4_6);&& if(bytesReceived &= sizeof(qint64)*2)&& { //如果接收到的数据小于16个字节,那么是刚开始接收数据,我们保存到//来的头文件信息&&&&&&& if((tcpServerConnection-&bytesAvailable() &= sizeof(qint64)*2)&&&&&&&&&&& && (fileNameSize == 0))&&&&&&& { //接收数据总大小信息和文件名大小信息&&&&&&&&&&& in && totalBytes && fileNameS&&&&&&&&&&& bytesReceived += sizeof(qint64) * 2;&&&&&&& }&&&&&&& if((tcpServerConnection-&bytesAvailable() &= fileNameSize)&&&&&&&&&&& && (fileNameSize != 0))&&&&&&& {& //接收文件名,并建立文件&&&&&&&&&&& in && fileN//fileName存放文件名&&&&&&&&&&& ui-&serverStatusLabel-&setText(tr("接收文件 %1 …") .arg(fileName));&&&&&&&&&&& bytesReceived += fileNameS&&&&&&&&&&& localFile = new QFile(fileName);//localFile为本地文件&&&&&&&&&&& if(!localFile-&open(QFile::WriteOnly))&&&&&&&&&&& {&&&&&&&&&&&&&&& qDebug() && "open file error!";&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&& }&&&&&&&&& }&& if(bytesReceived & totalBytes)&& {& //如果接收的数据小于总数据,那么写入文件&&&&&& bytesReceived += tcpServerConnection-&bytesAvailable();&&&&&& inBlock = tcpServerConnection-&readAll();//inBlock为数据缓冲区&&&&&& localFile-&write(inBlock);&&&&&& inBlock.resize(0);&& }&& ui-&serverProgressBar-&setMaximum(totalBytes);//设置进度条的最大值&& ui-&serverProgressBar-&setValue(bytesReceived);//设置进度条的当前值 && //更新进度条&& if(bytesReceived == totalBytes)&& { //接收数据完成时&&& tcpServerConnection-&close();&&& localFile-&close();&&& ui-&startButton-&setEnabled(true);&&& ui-&serverStatusLabel-&setText(tr("接收文件 %1 成功!").arg(fileName));&& }}//(5)错误处理函数。void Widget::displayError(QAbstractSocket::SocketError) //错误处理{&&& qDebug() && tcpServerConnection-&errorString();&&& tcpServerConnection-&close();&&& ui-&serverProgressBar-&reset();//进度条复位。& &&& ui-&serverStatusLabel-&setText(tr("服务端就绪"));&&& ui-&startButton-&setEnabled(true);}void Widget::on_startButton_clicked(){&&& start();}Widget::~Widget(){&&&}
code : widget.h#ifndef WIDGET_H#define WIDGET_H#include &QWidget&#include &QtNetwork/QtNetwork&namespace Ui {class W}class Widget : public QWidget{&&& Q_OBJECT&&& public:&&& explicit Widget(QWidget *parent = 0);&&& ~Widget();&&& private:&&& Ui::Widget *&&& QTcpServer tcpS&&& QTcpSocket *tcpServerC&&& qint64 totalB& //存放总大小信息&&& qint64 bytesR& //已收到数据的大小&&& qint64 fileNameS& //文件名的大小信息&&& QString fileN&& //存放文件名&&& QFile *localF&& //本地文件&&& QByteArray inB&& //数据缓冲区private slots:&&& void on_startButton_clicked();&&& void start();&& //开始监听&&& void acceptConnection();& //建立连接&&& void updateServerProgress();& //更新进度条,接收数据&&& void displayError(QAbstractSocket::SocketError socketError);};#endif // WIDGET_H
阅读(3072)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'Qt【tcp server 】',
blogAbstract:'p { margin-bottom: 0.21 }h3 { margin-bottom: 0.21 }a:link { }
Tcp - Server
开始监听按钮
开始监听网络IP
地址和端口号 。
看是否有连接信号。[调用QTcpServer::Listen();如下
bool QTcpServer::listen ( const
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}Linux TCP server系列(1)-简单TCP服务器+多进程处理客户请求
client.cpp
#include&sys/types.h&
#include&stdlib.h&
#include&stdio.h&
#include&unistd.h&
#include&sys/socket.h&
#include&strings.h&
#include&string.h&
#include&arpa/inet.h&
#include&errno.h&
#define SERVER_PORT 84
void str_cli(char *data,int sockfd)
& & char recv[512];
& & int wc=write(sockfd,data,strlen(data));
& & exit(0);
int main(int argc, char **argv)
& & struct sockaddr_
& & if(argc!=3)
& & & & return -1;
& & sockfd=socket(AF_INET,SOCK_STREAM,0);
& & if(sockfd==-1)
& & & & printf(&socket established error: %s\n&,(char*)strerror(errno)); return -1;
& & bzero(&servaddr,sizeof(servaddr));
& & servaddr.sin_family=AF_INET;
& & servaddr.sin_port=htons(SERVER_PORT);
& & inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
& & printf(&client try to connect\n&);
& & int conRes=connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
& & if(conRes==-1)
& & & & printf(&connect error: %s\n&,strerror(errno)); return -1;
& & str_cli(argv[2],sockfd);
& & exit(0);
&& 最简单的服务器仅能完成基本的通信,并没有考虑其他边界或者异常情况,同时,采用子进程处理客户端连接,一旦子进程数量增多,并且子进程需要长时间的运行,那么服务器性能将严重下降。
client.cpp
#include&sys/types.h&
#include&stdlib.h&
#include&stdio.h&
#include&unistd.h&
#include&sys/socket.h&
#include&strings.h&
#include&string.h&
#include&arpa/inet.h&
#include&errno.h&
#include&stdio.h&
#include&algorithm&
#define SERVER_PORT 84
void str_cli(char *data,int sockfd);
int main(int argc, char **argv)
& & struct sockaddr_
& & //tcpcli &ipaddress& &data&
& & if(argc!=3)
& & & & return -1;
& & sockfd=socket(AF_INET,SOCK_STREAM,0);
& & & & if(sockfd==-1)
& & & &printf(&socket established error: %s\n&,(char*)strerror(errno));&
& & bzero(&servaddr,sizeof(servaddr));
& & servaddr.sin_family=AF_INET;
& & servaddr.sin_port=htons(SERVER_PORT);
& & inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
& & printf(&client try to connect\n&);
& & int conRes=connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
& & if(conRes==-1)
& & & & & &printf(&connect error: %s\n&,strerror(errno));
& & str_cli(argv[2],sockfd);
& & exit(0);
void str_cli(char *data,int sockfd)
& & int n=0;
& & char recv[512];
& & FILE* fp=
& & int maxfdp1;
& & char sendline[512],recvline[512];
& & FD_ZERO(&rset);
& & for(;;)
& & & & FD_SET(fileno(fp),&rset);
& & & & FD_SET(sockfd,&rset);
& & & & maxfdp1=std::max( fileno(fp),sockfd) &#43;1;
& & & & select(maxfdp1,&rset,NULL,NULL,NULL); & & & & & &//使用select使得客户端不需要注释在标准IO 或者 TCP read的其中一个上
& & & & if( FD_ISSET(sockfd,&rset))
& & & & & & if(read(sockfd,recvline,sizeof(recvline))==0)&
& & & & & & //那边发来需要有换行符表示串尾,不然这边要求接受的字节数还不到,或者还没到尾部,所以没有输出
& & & & & & {&
& & & & & & & & printf(&read error\n&);
& & & & & & & & //handle error;
& & & & & & & &
& & & & & & }
& & & & // & &printf(&readed:%d,str:%d&,cr,strlen(recvline));
& & & & // & & &如果tcp缓冲区内有多于预定义取的字节,则会自动调用read再取,直到结尾或者遇到换行符
& & & & & & fputs(recvline,stdout); & & & & & & & & & & & & & &//标准库函数fputs向标准IO上写一行
& & & & & & bzero(&recvline,strlen(recvline));
& & & & if( FD_ISSET(fileno(fp),&rset))
& & & & & & if(fgets(sendline,sizeof(sendline),fp)==NULL) & &//标准库函数fgets从标准IO上获取一行
& & & & & & //fgets会加上换行符,如果有
& & & & & & & &
& & & & & & write(sockfd,sendline,strlen(sendline)-1); & & & &
& & & & & & //减一去除换行符
& & & & & & bzero(&sendline,strlen(sendline));
& 服务器增加了对子进程退出时的信号处理,防止子进程数增多后带来的资源消耗,客户端使用select避免阻塞在标准IO和socket IO上。
看过本文的人也看了:
我要留言技术领域:
取消收藏确定要取消收藏吗?
删除图谱提示你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?
删除节点提示无法删除该知识节点,因该节点下仍保存有相关知识内容!
删除节点提示你确定要删除该知识节点吗?

我要回帖

更多关于 tcph是什么意思 的文章

 

随机推荐