导航:首页 > 编程语言 > tcp编程控制台输入数据

tcp编程控制台输入数据

发布时间:2022-08-03 12:26:32

❶ 如何使用TCP向远端SERVER传输数据

如何使用TCP向远端SERVER传输数据 (发送与接收) 1. 如何使用TCP向远端SERVER传输数据 先要建立一个TCP连接.模块作为CLIENT向远程的SERVER发起一个TCP连接,要成功 建立连接需要SERVER端为连接到INTERNET的一台PC,而且该PC的IP地址是公网的IP地址 (可以用拨号的方式获得,如在PC局域网内部则无法建立连接),然后该PC运行我们的 SERVER软件,这时就可以在模块端用AT命令与SERVER建立TCP连接(AT+CIPSTART= "TCP","SERVER的IP地址","SERVER的端口号"),连接成功后会返回CONNECT OK.然后就可以用AT+CIPSEND发送数据到SERVER,若SERVER有数据,模块自动通过 串口接收.要关闭TCP连接可用AT+CIPCLOSE命令. 2. 如何使用UDP向远端SERVER传输数据 先要注册一个UDP端口(AT+CIPSTART="UDP","SERVER的IP地址","SERVER 的端口号"),成功后返回CONNECT OK.然后用AT+CIPSEND发送UDP包到SERVER, 若SERVER有数据,模块自动接收,从串口送出. 3. 如何发送数据 要发送数据必须先要建立TCP连接或注册一个UDP连接.有3种方式发送数据.可变长 度的数据发送可以用AT+CIPSEND命令,返回"$amp;>amp;$quot;后输入发送的数据,ctrl+z(0x1a)启动 发送.固定长度的数据发送用AT+CIPSEND=LENGTH命令,返回"> "后输入发送的数据, 当输入的数据长度等于LENGTH的时候自动发送,不需结束符.还有一种自动发送方式,先 用AT+CIPATS=,命令设定自动发送的时间,然后用AT+CIPSEND返回"$amp;>amp;$quot; 输入要发送的数据,等定时到了之后自动发送输入的数据.发送完成之后返回SEND OK. 此时处于命令态,若有数据发送再重复以上的步骤就可以了. 注意:每次发送的数据长度应小于1024bytes. 4. 如何接收数据 接收数据为自动接收,若有远端数据则自动接收.可以用AT+CIPHEAD=1在接收的数 据前面自动加上标识. SIMCOM Application Note for SIM100 TCP/IP AT Commands 4 5. 如何使用SIM100TCP的SERVER功能 模块可以配置为TCPSERVER,接收来自远端的TCP数据.具体的操作如下: AT+CIPCSGP=1,"cmnet"(GPRS方式) AT+CLPORT="TCP","PORT" (设定侦听的TCP的端口号) AT+CIPSERVER (启动SERVER功能,成功后返回SERVER OK,这时候已经启动了SERVER 功能,开始侦听PORT) AT+CIFSR (获得SERVER的IP地址) 或者: AT+CIPCSGP=0,"17201","172","172", 2 (CSD方式,置为CSD连接,拨17201,用户名和密 码皆为172,连接速率为9600) AT+CLPORT="TCP","PORT"(设定侦听的TCP端口号) AT+CIPSERVER(启动SERVER功能,成功后返回CONNECT 9600 和 SERVER OK,这时 候已经启动了SERVER功能,开始侦听PORT) AT+CIFSR (获得SERVER的IP地址) 可以用SMS通知远端模块本SERVER的IP地址和端口号,以便远端可以与之连接,收发 数据. 这时远端的模块就可以与本SERVER建立连接,收发数据了. 如有CLIENT连接到SERVER,SERVER端会显示 REMOTE CLIENT的IP地址和端口号. 这时候SERVER就可以接收来自REMOTE CLIENT的TCP数据包(不含TCP头)了. 注意:目前TCP SERVER不能同时支持多个TCP连接. SIMCOM Application Note for SIM100 TCP/IP AT Commands 5 6. 如何使用UDP,接收来自远端的数据 可以使用SIM100TCP的UDP功能,接收来自远端的UDP数据.具体过程如下: AT+CIPCSGP=1,"cmnet"(GPRS方式) AT+CLPORT="UDP","端口号"(设置UDP端口号) AT+CSTT (启动TCP任务,成功后返回OK) AT+CIICR (激活场景,成功后返回OK) AT+CIFSR (获得本地IP地址) AT+CIPSTART="UDP","REMOTE IP ADDR","REMOTE PORT"(注册UDP 连接,其中"REMOTE IP ADDR"和"REMOTE PORT"可以随便设置一个,成功 后返回CONNECT OK) 或者 AT+CIPCSGP=0,"17201","172","172", 2 (CSD方式,置为CSD连接,拨17201,用户名 和密码皆为172,连接速率为9600) AT+CLPORT="UDP","PORT"(设定UDP端口号) AT+CSTT (启动TCP任务) AT+CIICR (激活场景,成功后返回CONNECT 9600和OK) AT+CIFSR (获得本地IP地址) AT+CIPSTART="UDP","REMOTE IP ADDR","REMOTE PORT"(注册UDP 连接,其中"REMOTE IP ADDR"和"REMOTE PORT"可以随便设置一个,成功 后返回CONNECT OK) 此时就模块就可以接收到远端的UDP包.可以用AT+CIPSRIP=1在收到的UDP包的前面 加上标识和发送方的IP地址和端口号. SIMCOM Application Note for SIM100 TCP/IP AT Commands 6 7. 如何使用DNS功能 利用SIM100TCP的DNS可直接连接到一个域名,或者可以用DNS解析域名获得IP地址.具体 步骤如下: 直接连接到一个域名 1:先配置DNS AT+CDNSCFG="211.136.18.171" (以上海为例) 2:选择域名还是IP地址 AT+CDNSORIP=1(选择域名) 3:建立连接 AT+CIPSTART="TCP","", "80" (连接到SERVER) 4:发送数据 AT+CIPSEND返回"$amp;>amp;$quot;后开始发送数据,ctrl+z启动发送. 解析域名获得IP地址 1:先激活一个移动场景 AT+CSTT AT+CIICR AT+CIFSR 2:配置DNS AT+CDNSCFG="211.136.18.171" (以上海为例) 3:解析域名,获得IP地址 AT+CDNSGIP="" 返回该域名的IP地址 8. 如何检测是否在线,断线后有什么提示 可以用AT+CIPSTATUS查询TCP所处的状态,具体状态请参考AT命令集,若处于连接 状态则返回CONNECTOK.断线后会主动返回CLOSE信息,同时TCP状态为IP CLOSE. 9. 如何区分接收的数据是AT命令的响应还是来自远端 设定AT+CIPHEAD=1,这样来自SERVER的数据前面就会自动加上一个标志,其格式 为:+IPD(datalength),+IPD为标识,datalength为来自SERVER端数据的长度.这样就可以 区分是来自SERVER的数据还是AT命令的相应. SIMCOM Application Note for SIM100 TCP/IP AT Commands 7 10. 如何使用SIM100TCP建立点对点的TCP连接,传输数据 用GPRS方式的具体步骤为: 第一台: AT+CLPORT="TCP","3030" AT+CIPSERVER (启动SERVER功能,开始侦听3030端口) AT+CIFSR(获取本地IP地址) AT+CLPORT="TCP","3000"(设置本地TCP端口) 第二台: AT+CLPORT="TCP","2020" AT+CIPSERVER (启动SERVER功能,开始侦听2020端口) AT+CIFSR(获取本地IP地址) AT+CLPORT="TCP","2000"(设置本地TCP端口) 第一台: AT+CIPSTART="TCP","REMOTE IP ADDR","2020" (REMOTEIP ADDR可由对方发SMS 得到) 已经建立连接 第二台: AT+CIPSTART="TCP","REMOTE IP ADDR","3030" 已经建立连接 之后任何一方就可以向另外一方发数据(用AT+CIPSEND发送) 也可以用CSD方式建立,具体操作如下: 第一台: AT+CIPCSGP=0,"17201","172","172", 2 (CSD方式,置为CSD连接,拨17201,用户名和 密码皆为172,连接速率为9600) AT+CLPORT="TCP","3030" AT+CIPSERVER (启动SERVER功能,开始侦听3030端口) AT+CIFSR(获取本地IP地址) AT+CLPORT="TCP","3000" 第二台: AT+CIPCSGP=0,"17201","172","172", 2 (CSD方式,置为CSD连接,拨17201,用户名和 密码皆为172,连接速率为9600) AT+CLPORT="TCP","2020" AT+CIPSERVER (启动SERVER功能,开始侦听2020端口) AT+CIFSR(获取本地IP地址) AT+CLPORT="TCP","2000" SIMCOM Application Note for SIM100 TCP/IP AT Commands 8 第一台: AT+CIPSTART="TCP","REMOTE IP ADDR","2020" (REMOTEIP ADDR可由对方发SMS 得到) 已经建立连接 第二台: AT+CIPSTART="TCP","REMOTE IP ADDR","3030" 已经建立连接 之后任何一方就可以向另外一方发数据(用AT+CIPSEND发送) SIMCOM Application Note for SIM100 TCP/IP AT Commands 9 11. 如何使用SIM100TCP实现多个模块之间的互相通信 目前SIM100TCP不支持多个TCP同时连接,但是可以用UDP方式来实现.可以用模块启 动UDP功能,这样模快就可以接收来自远端的UDP包,可以通过收到的UDP包获取发送方的 IP地址和端口号,然后本模块就可以作出应答,回应一个UDP包,实现相互的通讯.下面是 一个简单的例子: 假设A,B,C三个模块要相互通信,可以用以下的方式实现(以GPRS方式为例) 1:A,B,C分别初始化如下: AT+CIPCSGP=1,"cmnet"(GPRS方式) AT+CLPORT="UDP","端口号"(设置UDP端口号) AT+CSTT (启动TCP任务,成功后返回OK) AT+CIICR (激活场景,成功后返回OK) AT+CIFSR (获得本地IP地址) AT+CIPSTART="UDP","REMOTE IP ADDR","REMOTE PORT"(注册UDP 连接,其中"REMOTE IP ADDR"和"REMOTE PORT"可以随便设置一个,成功后返回 CONNECT OK) 2:若A要向B发送数据,只要这样就可以了: AT+CIPCLOSE (注销当前UDP连接) AT+CIPSTART="UDP","B的IP地址","B的端口号"(注册新的UDP连接) (成功后会返回CONNECTOK和OK) AT+CIPSEND (发送数据) 若C有数据发给A,则A自动接收到,同时可以获得C的IP地址和端口号,这样A就可以 发UDP包给C了,具体过程跟上面类似. SIMCOM Application Note for SIM100 TCP/IP AT Commands 10 12. TCP连接出错后应该如何处理 若在建立TCP连接的过程中出现错误或者SERVER断线,则先用AT+CIPCLOSE关闭 TCP连接(本地IP地址不变),然后再重新建立连接.若其他时候可以用AT+CIPSHUT关闭 PDP Context(本地IP地址会改变),然后重新建立连接. 13. 如何建立一个点对点的CSD连接 首先要确保SIM卡已开通CSD业务,直接呼叫对方号码(数据呼叫,非语音呼叫),对 方用ATA应答,然后会返回CONNECT 9600,这时候双方进入完全的透明数据传输状态,双 方都可以收发数据,发+++后返回命令态(注意+++的前后0.5秒内必须无数据传输才能返回 命令态),ATO可返回数据态.ATH可结束本次CSD连接.

❷ 用java编写TCP文件传输程序

1.调用类java.lang.Math的成员方法“public static double random()”运算下面表达式10000次,
(int) (Math.random()*20+0.5)
统计其中生成的整数10,1,2,…,20的个数分别是多少,并输出统计结果。

2.调用类java.lang.Math的成员方法“public static double random()”设法生成10个互不相同的从‘a'到'z'字母,然后对这10个字母按从小到大的方式排序。输出排序前的字母序列和排序后的字母序列。

3.编写一个程序,要求输入5个学生的成绩(从0到100的整数),并将这5个数保存到文件“data.txt"中。然后再编写一个程序,从文件“data.txt”中读取这5个学生的成绩,计算并输出它们的平均数,然后再按照从小到大的顺序输出这5个学生的成绩。

4.编写一个程序,修改在上一题生成的文件“data.txt”中的文件内容,使得第三个学生的成绩变成为这5个学生的平均成绩,并在控制台窗口中输出在修改之后的文件内容

❸ 关于java编程。设计一个基于TCP/IP协议的网络程序,实现如下功能:

写好了,有什么问题请追问。
客户端:

import java.net.*;
import java.io.*;

public class TestSocketClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1", 5566);
System.out.println("请输入计算式:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s1 = br.readLine();
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
DataInputStream dis = new DataInputStream(socket.getInputStream());
dos.writeUTF(s1);
dos.flush();

double s = dis.readDouble();
System.out.println("计算结果:" + s);
dis.close();
dos.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("连接出错");
System.exit(-1);
}
}
}

服务器端:
import java.net.*;
import java.io.*;

public class TestSocketServer {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(5566);
Socket socket = ss.accept();

DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
DataInputStream dis = new DataInputStream(socket.getInputStream());
String s = null;
if ((s = dis.readUTF()) != null) {
System.out.println("接收到的算式:" + s);
double result = 0;
String[] sarr1 = s.split("[\\+\\-\\*\\/]");

double a = Double.parseDouble(sarr1[0].trim());
double b = Double.parseDouble(sarr1[1].trim());

String[] sarr2 = s.split("^(-?\\d+)(\\.\\d+)?");
char c = sarr2[1].trim().charAt(0);
switch (c) {
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
case '/':
result = a / b;
break;
default:
break;
}
dos.writeDouble(result);
dos.flush();
}
dis.close();
dos.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
System.exit(-1);
}

}
}

❹ 怎么使用TCP向远端SERVER传输数据

如何使用TCP向远端SERVER传输数据 (发送与接收)
1. 如何使用TCP向远端SERVER传输数据
先要建立一个TCP连接.模块作为CLIENT向远程的SERVER发起一个TCP连接,要成功
建立连接需要SERVER端为连接到INTERNET的一台PC,而且该PC的IP地址是公网的IP地址
(可以用拨号的方式获得,如在PC局域网内部则无法建立连接),然后该PC运行我们的
SERVER软件,这时就可以在模块端用AT命令与SERVER建立TCP连接(AT+CIPSTART=
"TCP","SERVER的IP地址","SERVER的端口号"),连接成功后会返回CONNECT
OK.然后就可以用AT+CIPSEND发送数据到SERVER,若SERVER有数据,模块自动通过
串口接收.要关闭TCP连接可用AT+CIPCLOSE命令.
2. 如何使用UDP向远端SERVER传输数据
先要注册一个UDP端口(AT+CIPSTART="UDP","SERVER的IP地址","SERVER
的端口号"),成功后返回CONNECT OK.然后用AT+CIPSEND发送UDP包到SERVER,
若SERVER有数据,模块自动接收,从串口送出.
3. 如何发送数据
要发送数据必须先要建立TCP连接或注册一个UDP连接.有3种方式发送数据.可变长
度的数据发送可以用AT+CIPSEND命令,返回"$amp;>amp;$quot;后输入发送的数据,ctrl+z(0x1a)启动
发送.固定长度的数据发送用AT+CIPSEND=LENGTH命令,返回"> "后输入发送的数据,
当输入的数据长度等于LENGTH的时候自动发送,不需结束符.还有一种自动发送方式,先
用AT+CIPATS=,命令设定自动发送的时间,然后用AT+CIPSEND返回"$amp;>amp;$quot;
输入要发送的数据,等定时到了之后自动发送输入的数据.发送完成之后返回SEND OK.
此时处于命令态,若有数据发送再重复以上的步骤就可以了.
注意:每次发送的数据长度应小于1024bytes.
4. 如何接收数据
接收数据为自动接收,若有远端数据则自动接收.可以用AT+CIPHEAD=1在接收的数
据前面自动加上标识.
SIMCOM Application Note for SIM100 TCP/IP AT Commands
4
5. 如何使用SIM100TCP的SERVER功能
模块可以配置为TCPSERVER,接收来自远端的TCP数据.具体的操作如下:
AT+CIPCSGP=1,"cmnet"(GPRS方式)
AT+CLPORT="TCP","PORT" (设定侦听的TCP的端口号)
AT+CIPSERVER (启动SERVER功能,成功后返回SERVER OK,这时候已经启动了SERVER
功能,开始侦听PORT)
AT+CIFSR (获得SERVER的IP地址)
或者:
AT+CIPCSGP=0,"17201","172","172", 2 (CSD方式,置为CSD连接,拨17201,用户名和密
码皆为172,连接速率为9600)
AT+CLPORT="TCP","PORT"(设定侦听的TCP端口号)
AT+CIPSERVER(启动SERVER功能,成功后返回CONNECT 9600 和 SERVER OK,这时
候已经启动了SERVER功能,开始侦听PORT)
AT+CIFSR (获得SERVER的IP地址)
可以用SMS通知远端模块本SERVER的IP地址和端口号,以便远端可以与之连接,收发
数据.
这时远端的模块就可以与本SERVER建立连接,收发数据了.
如有CLIENT连接到SERVER,SERVER端会显示 REMOTE CLIENT的IP地址和端口号.
这时候SERVER就可以接收来自REMOTE CLIENT的TCP数据包(不含TCP头)了.
注意:目前TCP SERVER不能同时支持多个TCP连接.
SIMCOM Application Note for SIM100 TCP/IP AT Commands
5
6. 如何使用UDP,接收来自远端的数据
可以使用SIM100TCP的UDP功能,接收来自远端的UDP数据.具体过程如下:
AT+CIPCSGP=1,"cmnet"(GPRS方式)
AT+CLPORT="UDP","端口号"(设置UDP端口号)
AT+CSTT (启动TCP任务,成功后返回OK)
AT+CIICR (激活场景,成功后返回OK)
AT+CIFSR (获得本地IP地址)
AT+CIPSTART="UDP","REMOTE IP ADDR","REMOTE PORT"(注册UDP
连接,其中"REMOTE IP ADDR"和"REMOTE PORT"可以随便设置一个,成功
后返回CONNECT OK)
或者
AT+CIPCSGP=0,"17201","172","172", 2 (CSD方式,置为CSD连接,拨17201,用户名
和密码皆为172,连接速率为9600)
AT+CLPORT="UDP","PORT"(设定UDP端口号)
AT+CSTT (启动TCP任务)
AT+CIICR (激活场景,成功后返回CONNECT 9600和OK)
AT+CIFSR (获得本地IP地址)
AT+CIPSTART="UDP","REMOTE IP ADDR","REMOTE PORT"(注册UDP
连接,其中"REMOTE IP ADDR"和"REMOTE PORT"可以随便设置一个,成功
后返回CONNECT OK)
此时就模块就可以接收到远端的UDP包.可以用AT+CIPSRIP=1在收到的UDP包的前面
加上标识和发送方的IP地址和端口号.
SIMCOM Application Note for SIM100 TCP/IP AT Commands
6
7. 如何使用DNS功能
利用SIM100TCP的DNS可直接连接到一个域名,或者可以用DNS解析域名获得IP地址.具体
步骤如下:
直接连接到一个域名
1:先配置DNS
AT+CDNSCFG="211.136.18.171" (以上海为例)
2:选择域名还是IP地址
AT+CDNSORIP=1(选择域名)
3:建立连接
AT+CIPSTART="TCP","", "80" (连接到SERVER)
4:发送数据
AT+CIPSEND返回"$amp;>amp;$quot;后开始发送数据,ctrl+z启动发送.
解析域名获得IP地址
1:先激活一个移动场景
AT+CSTT
AT+CIICR
AT+CIFSR
2:配置DNS
AT+CDNSCFG="211.136.18.171" (以上海为例)
3:解析域名,获得IP地址
AT+CDNSGIP=""
返回该域名的IP地址
8. 如何检测是否在线,断线后有什么提示
可以用AT+CIPSTATUS查询TCP所处的状态,具体状态请参考AT命令集,若处于连接
状态则返回CONNECTOK.断线后会主动返回CLOSE信息,同时TCP状态为IP CLOSE.
9. 如何区分接收的数据是AT命令的响应还是来自远端
设定AT+CIPHEAD=1,这样来自SERVER的数据前面就会自动加上一个标志,其格式
为:+IPD(datalength),+IPD为标识,datalength为来自SERVER端数据的长度.这样就可以
区分是来自SERVER的数据还是AT命令的相应.

SIMCOM Application Note for SIM100 TCP/IP AT Commands
7
10. 如何使用SIM100TCP建立点对点的TCP连接,传输数据

用GPRS方式的具体步骤为:

第一台:
AT+CLPORT="TCP","3030"
AT+CIPSERVER (启动SERVER功能,开始侦听3030端口)
AT+CIFSR(获取本地IP地址)
AT+CLPORT="TCP","3000"(设置本地TCP端口)

第二台:
AT+CLPORT="TCP","2020"
AT+CIPSERVER (启动SERVER功能,开始侦听2020端口)
AT+CIFSR(获取本地IP地址)
AT+CLPORT="TCP","2000"(设置本地TCP端口)

第一台:
AT+CIPSTART="TCP","REMOTE IP ADDR","2020" (REMOTEIP ADDR可由对方发SMS
得到)
已经建立连接

第二台:
AT+CIPSTART="TCP","REMOTE IP ADDR","3030"
已经建立连接

之后任何一方就可以向另外一方发数据(用AT+CIPSEND发送)

也可以用CSD方式建立,具体操作如下:

第一台:
AT+CIPCSGP=0,"17201","172","172", 2 (CSD方式,置为CSD连接,拨17201,用户名和
密码皆为172,连接速率为9600)
AT+CLPORT="TCP","3030"
AT+CIPSERVER (启动SERVER功能,开始侦听3030端口)
AT+CIFSR(获取本地IP地址)
AT+CLPORT="TCP","3000"

第二台:
AT+CIPCSGP=0,"17201","172","172", 2 (CSD方式,置为CSD连接,拨17201,用户名和
密码皆为172,连接速率为9600)
AT+CLPORT="TCP","2020"
AT+CIPSERVER (启动SERVER功能,开始侦听2020端口)
AT+CIFSR(获取本地IP地址)
AT+CLPORT="TCP","2000"
SIMCOM Application Note for SIM100 TCP/IP AT Commands
8

第一台:
AT+CIPSTART="TCP","REMOTE IP ADDR","2020" (REMOTEIP ADDR可由对方发SMS
得到)
已经建立连接

第二台:
AT+CIPSTART="TCP","REMOTE IP ADDR","3030"
已经建立连接

之后任何一方就可以向另外一方发数据(用AT+CIPSEND发送)

SIMCOM Application Note for SIM100 TCP/IP AT Commands
9
11. 如何使用SIM100TCP实现多个模块之间的互相通信
目前SIM100TCP不支持多个TCP同时连接,但是可以用UDP方式来实现.可以用模块启
动UDP功能,这样模快就可以接收来自远端的UDP包,可以通过收到的UDP包获取发送方的
IP地址和端口号,然后本模块就可以作出应答,回应一个UDP包,实现相互的通讯.下面是
一个简单的例子:
假设A,B,C三个模块要相互通信,可以用以下的方式实现(以GPRS方式为例)
1:A,B,C分别初始化如下:
AT+CIPCSGP=1,"cmnet"(GPRS方式)
AT+CLPORT="UDP","端口号"(设置UDP端口号)
AT+CSTT (启动TCP任务,成功后返回OK)
AT+CIICR (激活场景,成功后返回OK)
AT+CIFSR (获得本地IP地址)
AT+CIPSTART="UDP","REMOTE IP ADDR","REMOTE PORT"(注册UDP
连接,其中"REMOTE IP ADDR"和"REMOTE PORT"可以随便设置一个,成功后返回
CONNECT OK)
2:若A要向B发送数据,只要这样就可以了:
AT+CIPCLOSE (注销当前UDP连接)
AT+CIPSTART="UDP","B的IP地址","B的端口号"(注册新的UDP连接)
(成功后会返回CONNECTOK和OK)
AT+CIPSEND (发送数据)
若C有数据发给A,则A自动接收到,同时可以获得C的IP地址和端口号,这样A就可以
发UDP包给C了,具体过程跟上面类似.
SIMCOM Application Note for SIM100 TCP/IP AT Commands
10
12. TCP连接出错后应该如何处理
若在建立TCP连接的过程中出现错误或者SERVER断线,则先用AT+CIPCLOSE关闭
TCP连接(本地IP地址不变),然后再重新建立连接.若其他时候可以用AT+CIPSHUT关闭
PDP Context(本地IP地址会改变),然后重新建立连接.
13. 如何建立一个点对点的CSD连接
首先要确保SIM卡已开通CSD业务,直接呼叫对方号码(数据呼叫,非语音呼叫),对
方用ATA应答,然后会返回CONNECT 9600,这时候双方进入完全的透明数据传输状态,双
方都可以收发数据,发+++后返回命令态(注意+++的前后0.5秒内必须无数据传输才能返回
命令态),ATO可返回数据态.ATH可结束本次CSD连接.

❺ 关于QT编程TCP通讯 用write传输数据的问题

个人认为可能是qPrintable转换后的数据为const指针吧,建议直接用
toLocal8Bit 试试吧 我觉得是参数强制转换的问题 很乐意和你一起探讨这个问题

❻ 用TCP传送512字节的数据。设窗口为100字节,而TCP报文段每次也是传送100字节数据。

1、作好编程准备,包括后面要用的头文件,以及一些变量的定义。

注意事项:

TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。

❼ 控制台程序如何进行网络编程

-- win API socket
本文所谈到的Socket函数如果没有特别说明,都是指的Windows Socket API。

一、WSAStartup函数
int WSAStartup(
WORD wVersionRequested,
LPWSADATA lpWSAData
);
使用Socket的程序在使用Socket之前必须调用WSAStartup函数。该函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指明副版本、低位字节指明主版本;操作系统利用第二个参数返回请求的Socket的版本信息。当一个应用程序调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket库到该应用程序中。以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。该函数执行成功后返回0。
例:假如一个程序要使用2.1版本的Socket,那么程序代码如下
wVersionRequested = MAKEWORD( 2, 1 );
err = WSAStartup( wVersionRequested, &wsaData );

二、WSACleanup函数
int WSACleanup (void);
应用程序在完成对请求的Socket库的使用后,要调用WSACleanup函数来解除与Socket库的绑定并且释放Socket库所占用的系统资源。

三、socket函数
SOCKET socket(
int af,
int type,
int protocol
);
应用程序调用socket函数来创建一个能够进行网络通信的套接字。第一个参数指定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参数置PF_INET;第二个参数指定要创建的套接字类型,流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM;第三个参数指定应用程序所使用的通信协议。该函数如果调用成功就返回新创建的套接字的描述符,如果失败就返回INVALID_SOCKET。套接字描述符是一个整数类型的值。每个进程的进程空间里都有一个套接字描述符表,该表中存放着套接字描述符和套接字数据结构的对应关系。该表中有一个字段存放新创建的套接字的描述符,另一个字段存放套接字数据结构的地址,因此根据套接字描述符就可以找到其对应的套接字数据结构。每个进程在自己的进程空间里都有一个套接字描述符表但是套接字数据结构都是在操作系统的内核缓冲里。下面是一个创建流套接字的例子:
struct protoent *ppe;
ppe=getprotobyname("tcp");
SOCKET ListenSocket=socket(PF_INET,SOCK_STREAM,ppe->p_proto);

四、closesocket函数
int closesocket(
SOCKET s
);
closesocket函数用来关闭一个描述符为s套接字。由于每个进程中都有一个套接字描述符表,表中的每个套接字描述符都对应了一个位于操作系统缓冲区中的套接字数据结构,因此有可能有几个套接字描述符指向同一个套接字数据结构。套接字数据结构中专门有一个字段存放该结构的被引用次数,即有多少个套接字描述符指向该结构。当调用closesocket函数时,操作系统先检查套接字数据结构中的该字段的值,如果为1,就表明只有一个套接字描述符指向它,因此操作系统就先把s在套接字描述符表中对应的那条表项清除,并且释放s对应的套接字数据结构;如果该字段大于1,那么操作系统仅仅清除s在套接字描述符表中的对应表项,并且把s对应的套接字数据结构的引用次数减1。
closesocket函数如果执行成功就返回0,否则返回SOCKET_ERROR。

五、send函数
int send(
SOCKET s,
const char FAR *buf,
int len,
int flags
);
不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。该函数的第一个参数指定发送端套接字描述符;第二个参数指明一个存放应用程序要发送数据的缓冲区;第三个参数指明实际要发送的数据的字节数;第四个参数一般置0。这里只描述同步Socket的send函数的执行流程。当调用该函数时,send先比较待发送数据的长度len和套接字s的发送缓冲区的长度,如果len大于s的发送缓冲区的长度,该函数返回SOCKET_ERROR;如果len小于或者等于s的发送缓冲区的长度,那么send先检查协议是否正在发送s的发送缓冲中的数据,如果是就等待协议把数据发送完,如果协议还没有开始发送s的发送缓冲中的数据或者s的发送缓冲中没有数据,那么send就比较s的发送缓冲区的剩余空间和len,如果len大于剩余空间大小send就一直等待协议把s的发送缓冲中的数据发送完,如果len小于剩余空间大小send就仅仅把buf中的数据到剩余空间里(注意并不是send把s的发送缓冲中的数据传到连接的另一端的,而是协议传的,send仅仅是把buf中的数据到s的发送缓冲区的剩余空间里)。如果send函数数据成功,就返回实际的字节数,如果send在数据时出现错误,那么send就返回SOCKET_ERROR;如果send在等待协议传送数据时网络断开的话,那么send函数也返回SOCKET_ERROR。要注意send函数把buf中的数据成功到s的发送缓冲的剩余空间里后它就返回了,但是此时这些数据并不一定马上被传到连接的另一端。如果协议在后续的传送过程中出现网络错误的话,那么下一个Socket函数就会返回SOCKET_ERROR。(每一个除send外的Socket函数在执行的最开始总要先等待套接字的发送缓冲中的数据被协议传送完毕才能继续,如果在等待时出现网络错误,那么该Socket函数就返回SOCKET_ERROR)
注意:在Unix系统下,如果send在等待协议传送数据时网络断开的话,调用send的进程会接收到一个SIGPIPE信号,进程对该信号的默认处理是进程终止。

六、recv函数
int recv(
SOCKET s,
char FAR *buf,
int len,
int flags
);
不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据。该函数的第一个参数指定接收端套接字描述符;第二个参数指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据;第三个参数指明buf的长度;第四个参数一般置0。这里只描述同步Socket的recv函数的执行流程。当应用程序调用recv函数时,recv先等待s的发送缓冲中的数据被协议传送完毕,如果协议在传送s的发送缓冲中的数据时出现网络错误,那么recv函数返回SOCKET_ERROR,如果s的发送缓冲中没有数据或者数据被协议成功发送完毕后,recv先检查套接字s的接收缓冲区,如果s接收缓冲区中没有数据或者协议正在接收数据,那么recv就一直等待,只到协议把数据接收完毕。当协议把数据接收完毕,recv函数就把s的接收缓冲中的数据到buf中(注意协议接收到的数据可能大于buf的长度,所以在这种情况下要调用几次recv函数才能把s的接收缓冲中的数据完。recv函数仅仅是数据,真正的接收数据是协议来完成的),recv函数返回其实际的字节数。如果recv在时出错,那么它返回SOCKET_ERROR;如果recv函数在等待协议接收数据时网络中断了,那么它返回0。
注意:在Unix系统下,如果recv函数在等待协议接收数据时网络断开了,那么调用recv的进程会接收到一个SIGPIPE信号,进程对该信号的默认处理是进程终止。

七、bind函数
int bind(
SOCKET s,
const struct sockaddr FAR *name,
int namelen
);
当创建了一个Socket以后,套接字数据结构中有一个默认的IP地址和默认的端口号。一个服务程序必须调用bind函数来给其绑定一个IP地址和一个特定的端口号。客户程序一般不必调用bind函数来为其Socket绑定IP地址和断口号。该函数的第一个参数指定待绑定的Socket描述符;第二个参数指定一个sockaddr结构,该结构是这样定义的:
struct sockaddr {
u_short sa_family;
char sa_data[14];
};
sa_family指定地址族,对于TCP/IP协议族的套接字,给其置AF_INET。当对TCP/IP协议族的套接字进行绑定时,我们通常使用另一个地址结构:
struct sockaddr_in {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
其中sin_family置AF_INET;sin_port指明端口号;sin_addr结构体中只有一个唯一的字段s_addr,表示IP地址,该字段是一个整数,一般用函数inet_addr()把字符串形式的IP地址转换成unsigned long型的整数值后再置给s_addr。有的服务器是多宿主机,至少有两个网卡,那么运行在这样的服务器上的服务程序在为其Socket绑定IP地址时可以把htonl(INADDR_ANY)置给s_addr,这样做的好处是不论哪个网段上的客户程序都能与该服务程序通信;如果只给运行在多宿主机上的服务程序的Socket绑定一个固定的IP地址,那么就只有与该IP地址处于同一个网段上的客户程序才能与该服务程序通信。我们用0来填充sin_zero数组,目的是让sockaddr_in结构的大小与sockaddr结构的大小一致。下面是一个bind函数调用的例子:
struct sockaddr_in saddr;
saddr.sin_family = AF_INET;
saddr.sin_port = htons(8888);
saddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(ListenSocket,(struct sockaddr *)&saddr,sizeof(saddr));

八、listen函数
int listen( SOCKET s, int backlog );
服务程序可以调用listen函数使其流套接字s处于监听状态。处于监听状态的流套接字s将维护一个客户连接请求队列,该队列最多容纳backlog个客户连接请求。假如该函数执行成功,则返回0;如果执行失败,则返回SOCKET_ERROR。

九、accept函数
SOCKET accept(
SOCKET s,
struct sockaddr FAR *addr,
int FAR *addrlen
);
服务程序调用accept函数从处于监听状态的流套接字s的客户连接请求队列中取出排在最前的一个客户请求,并且创建一个新的套接字来与客户套接字创建连接通道,如果连接成功,就返回新创建的套接字的描述符,以后与客户套接字交换数据的是新创建的套接字;如果失败就返回INVALID_SOCKET。该函数的第一个参数指定处于监听状态的流套接字;操作系统利用第二个参数来返回新创建的套接字的地址结构;操作系统利用第三个参数来返回新创建的套接字的地址结构的长度。下面是一个调用accept的例子:
struct sockaddr_in ServerSocketAddr;
int addrlen;
addrlen=sizeof(ServerSocketAddr);
ServerSocket=accept(ListenSocket,(struct sockaddr *)&ServerSocketAddr,&addrlen);

十、connect函数
int connect(
SOCKET s,
const struct sockaddr FAR *name,
int namelen
);
客户程序调用connect函数来使客户Socket s与监听于name所指定的计算机的特定端口上的服务Socket进行连接。如果连接成功,connect返回0;如果失败则返回SOCKET_ERROR。下面是一个例子:
struct sockaddr_in daddr;
memset((void *)&daddr,0,sizeof(daddr));
daddr.sin_family=AF_INET;
daddr.sin_port=htons(8888);
daddr.sin_addr.s_addr=inet_addr("133.197.22.4");
connect(ClientSocket,(struct sockaddr *)&daddr,sizeof(daddr));

❽ c语言写一个程序,完成功能如下: 1:实现从控制台多次输入数据,可以

输入单个字符的

FILE*fp;
intc;
while(1)
{
c=getchar();
if(c==EOF)break;
fp=fopen("out.txt","w");
fprintf(fp,"%c",c);
fclose(fp);
}

新版被推荐后无法追答,请勿追问

❾ java控制台 我怎么实现一个程序运行多个控制台, 实现从不同的控制台输入输出数据

你这个就好像累死于一个服务器与N个客户端的样子,比如QQ和QQ服务器,这种模式写一个服务端程序,然后再写一个客户端程序,客户端与服务端通过TCP或者UDP或者其他协议进行通信

阅读全文

与tcp编程控制台输入数据相关的资料

热点内容
按照文件夹分个压缩 浏览:102
航空工业出版社单片机原理及应用 浏览:756
如何在电信app上绑定亲情号 浏览:374
安卓的怎么用原相机拍月亮 浏览:803
配音秀为什么显示服务器去配音了 浏览:755
c盘清理压缩旧文件 浏览:325
app怎么交付 浏览:343
图虫app怎么才能转到金币 浏览:175
如何做征文app 浏览:446
用什么app管理斐讯 浏览:169
安卓如何下载宝可梦剑盾 浏览:166
编译器开发属于哪个方向 浏览:940
megawin单片机 浏览:687
以色列加密货币监督 浏览:909
程序员前端现在怎么样 浏览:499
服务器和接口地址ping不通 浏览:557
linux命令返回上级目录 浏览:899
移动花卡宝藏版为什么不能选免流app 浏览:257
速腾carplay怎么用安卓 浏览:13
红塔银行app怎么样 浏览:564