Socket基础

[b]ip的概念,什么是端口,tcp,ip,http协议个的作用,网络中如何定位一台机器
[/b]
Internet Protocol,网络之间互连的协议,IP地址也可以称为互联网地址或Internet地址。是用来唯一标识互联网上计算机的逻辑地址。每台连网计算机都依靠IP地址来标识自己。
计算机与外界交流的出入口。大多数操作系统都支持多程序(进程)同时运行,那么目的主机应该把接收到的数据包传送给众多同时运行的进程中的哪一个呢?显然这个问题有待解决,端口机制便由此被引入进来。
TCP是传输控制协议(Transmission Control Protocol)的缩写,IP地址是互联网协议(Internet Protocol)的缩写。世界上有各种不同类型的计算机,也有不同的操作系统,要想让这些装有不同操作系统的不同类型计算机互相通讯,就必须有统一的标准。TCP/IP是Internet使用的一组协议(Protocol),是目前被各方面遵从的网际互联工业标准。协议有底层和上层之分,底层协议规定了计算机硬件的接口规范,上层协议规定了软件程序必需共同遵守的一些规则以及程序员在写程序时使用的统一标准。TCP/IP有l00多个协议,其中用得最广的是SMTP(电子邮件协议)、FTP(文件传输协议)、TELNET(远程登录协议)。其中最重要的两个协议是传输控制协议TCP(Transmission Control Protocol)和互联协议IP(Internet Protocol)。IP负责信息的实际传送,而TCP则保证所传送的信息是正确的。
HTTP,即超文本传输协议,是 HyperText Transfer Protocol的缩写。浏览网页时在浏览器地址栏中输入的URL前面都是以"http://"开始的。HTTP定义了信息如何被格式化、如何被传输,以及在各种命令下服务器和浏览器所采取的响应。
在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。

[b]socket是如何工作的[/b]
<1> 服务器的套接字等待客户端的连接请求
<2> 客户端向服务器发出请求
<3> 接受到客户端请求后,创建新的套接字与客户端通信,而本身继续等待其他客户机的请求

[b] serversocket和socket的关系[/b]
服务器套接字通过指定的端口来等待连接的套接字。
Socket类表示套接字。使用Socket时,需要指定待连服务器的IP地址及端口号。
客户机创建了Socket对象以后,将马上向指定的IP地址及端口进行连接尝试。服务器套接字会创建新的套接字,使其与客户端的套接字连接起来,服务器端和客户端的套接字成功连接后,就可以通过彼此的输入/输出流进行通信了。

[b] socket之间通过什么机制进行数据的传输[/b]
IO流

[b]程序实例:文件传输[/b]
[color=red]MyClient.java[/color]

public class MyClient {
public static void main(String[] args){

try {
Socket socket = new Socket("127.0.0.1",1234);
//socket的数据流
BufferedWriter write = new BufferedWriter(new FileWriter("D:\\t.txt"));
//socket的输入流
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readline;

while( (readline = reader.readLine())!=null){
write.write(readline+"\r\n");//实现发送一行
write.flush();//buffered是带缓冲的,必须刷新后才能写入
}

write.close();
reader.close();
socket.close();
} catch (Exception e) {

e.printStackTrace();
}

}
}

[color=red]MyServer.java[/color]

public class MyServer {
public static void main(String[] args) {

ServerSocket server = null;
try {
server = new ServerSocket(1234);
Socket socket = server.accept();

//得到输出流
BufferedWriter write = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream()));

//文件输入流
FileReader freader = new FileReader(new File(
"E:\\t.txt"));

BufferedReader reader = new BufferedReader(freader);
String line = null;

//接收一行
while ((line = reader.readLine()) != null) {

write.write(line + "\r\n");

write.flush();
}
freader.close();
write.close();

socket.close();
server.close();

} catch (Exception e) {

e.printStackTrace();
}

}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当涉及到C++的Socket编程,一个常见的基础项目是创建一个简单的客户端和服务器之间的通信。下面是一个简单的示例,展示了如何使用C++的Socket库来实现这样一个项目: **服务器端代码:** ```cpp #include <iostream> #include <cstdlib> #include <cstring> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int main() { int serverSocket, clientSocket; struct sockaddr_in serverAddress, clientAddress; char buffer[1024]; // 创建服务器端socket serverSocket = socket(AF_INET, SOCK_STREAM, 0); if (serverSocket < 0) { std::cerr << "无法创建socket!" << std::endl; return 1; } // 绑定服务器地址和端口 serverAddress.sin_family = AF_INET; serverAddress.sin_port = htons(12345); // 设置端口号为12345 serverAddress.sin_addr.s_addr = INADDR_ANY; if (bind(serverSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) < 0) { std::cerr << "绑定失败!" << std::endl; return 1; } // 监听连接请求 listen(serverSocket, 5); std::cout << "等待客户端连接..." << std::endl; // 接受客户端连接 socklen_t clientAddressLength = sizeof(clientAddress); clientSocket = accept(serverSocket, (struct sockaddr*)&clientAddress, &clientAddressLength); // 接收和发送数据 while (true) { memset(buffer, 0, sizeof(buffer)); int bytesRead = read(clientSocket, buffer, sizeof(buffer)); if (bytesRead <= 0) { // 连接断开或出错 break; } std::cout << "收到消息:" << buffer << std::endl; // 回复客户端 std::string message = "已收到消息!"; write(clientSocket, message.c_str(), message.size()); } // 关闭socket close(clientSocket); close(serverSocket); return 0; } ``` **客户端代码:** ```cpp #include <iostream> #include <cstdlib> #include <cstring> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int main() { int clientSocket; struct sockaddr_in serverAddress; char buffer[1024]; // 创建客户端socket clientSocket = socket(AF_INET, SOCK_STREAM, 0); if (clientSocket < 0) { std::cerr << "无法创建socket!" << std::endl; return 1; } // 设置服务器地址和端口 serverAddress.sin_family = AF_INET; serverAddress.sin_port = htons(12345); // 设置服务器端口号为12345 serverAddress.sin_addr.s_addr = inet_addr("127.0.0.1"); // 设置服务器IP地址 // 连接服务器 if (connect(clientSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) < 0) { std::cerr << "连接失败!" << std::endl; return 1; } // 发送和接收数据 while (true) { std::string message; std::cout << "请输入消息:"; std::getline(std::cin, message); if (message == "exit") { // 输入"exit"表示结束通信 break; } // 发送消息 write(clientSocket, message.c_str(), message.size()); // 接收服务器回复 memset(buffer, 0, sizeof(buffer)); int bytesRead = read(clientSocket, buffer, sizeof(buffer)); if (bytesRead <= 0) { // 连接断开或出错 break; } std::cout << "收到回复:" << buffer << std::endl; } // 关闭socket close(clientSocket); return 0; } ``` 这个示例展示了基本的客户端和服务器之间的通信过程。服务器监听指定的端口,等待客户端连接。一旦有客户端连接成功,服务器会接收来自客户端的消息,并回复一个固定的消息。客户端首先创建一个socket并连接到服务器,然后可以发送消息给服务器并接收服务器的回复。 请注意,这只是一个简单的示例,没有包含错误处理和异常情况的处理。在实际开发中,您可能需要更全面和健壮的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值