在我的客户机-服务器代码中,我可以使用通过ifconfig获得的IP地址对服务器进行telnet?
但当我使用相同的IP地址通过客户端代码连接到服务器时,它会提供连接接收 connect()失败:连接被拒绝。 我希望通过getsockname()检查服务器Ipaddress。我收到的Ipaddress为 地址是“0.0.0.0:9000” 我用过这个 我是一名使用Oracle虚拟盒环境(Ubuntu)的Bigner程序员 请澄清我应该使用哪个IP地址传递到客户端以连接到服务器 用法:。/ 用法:。/ 我基本上是想做一个echo服务器。 提前谢谢。 客户端代码: #包括“实用的.h”在我的客户机-服务器代码中,我可以使用通过ifconfig获得的IP地址对服务器进行telnet?,c,sockets,network-programming,ubuntu-11.04,C,Sockets,Network Programming,Ubuntu 11.04,但当我使用相同的IP地址通过客户端代码连接到服务器时,它会提供连接接收 connect()失败:连接被拒绝。 我希望通过getsockname()检查服务器Ipaddress。我收到的Ipaddress为 地址是“0.0.0.0:9000” 我用过这个 我是一名使用Oracle虚拟盒环境(Ubuntu)的Bigner程序员 请澄清我应该使用哪个IP地址传递到客户端以连接到服务器 用法:。/ 用法:。/ 我基本上是想做一个echo服务器。 提前谢谢。 客户端代码: #包括“实用的.h” intma
intmain(intargc,char*argv[]){
if(argc<3 | | argc>4)//测试参数的正确数量
DieWithUserMessage(“参数)”,
" []");
char*servIP=argv[1];//第一个arg:服务器IP地址(虚线四元)
char*echoString=argv[2];//第二个arg:要回显的字符串
//第三个参数(可选):服务器端口(数字)。7是众所周知的回显端口
在服务端口=(argc==4)中,atoi(argv[3]):7;
//使用TCP创建可靠的流套接字
int sock=socket(AF_INET、sock流、IPPROTO_TCP);
if(sock<0)
DieWithSystemMessage(“套接字()失败”);
//构造服务器地址结构
servAddr中的struct sockaddr\u;//服务器地址
memset(&servAddr,0,sizeof(servAddr));//零出结构
servAddr.sin_family=AF_INET;//IPv4地址族
//转换地址
int rtnVal=inet\u pton(AF\u inet、servIP和servAddr.sin\u addr.s\u addr);
如果(rtnVal==0)
DieWithUserMessage(“inet_pton()失败”,“地址字符串无效”);
否则如果(rtnVal<0)
DieWithSystemMessage(“inet_pton()失败”);
servAddr.sin_port=htons(servPort);//服务器端口
printf(“你好”);
//建立与echo服务器的连接
if(connect(sock,(struct sockaddr*)&servAddr,sizeof(servAddr))<0
DieWithSystemMessage(“连接()失败”);
size_t echoStringLen=strlen(echoString);//确定输入长度
//将字符串发送到服务器
ssize_t numBytes=send(sock,echoString,echoStringLen,0);
如果(单位<0)
DieWithSystemMessage(“发送()失败”);
else if(numBytes!=echoStringLen)
DieWithUserMessage(“send(),“发送了意外的字节数”);
//从服务器接收相同的字符串
unsigned int totalBytesRcvd=0;//接收的总字节数
fputs(“Received:,stdout);//用于打印回显字符串的设置
而(totalBytesRcvd0){//0表示流的结束
//将消息回显到客户端
ssize_t numbytssent=send(clntSocket,buffer,numbytsrvd,0);
if(numbytestsent<0)
printf(“发送()失败”);
否则如果(numbytestsent!=numbytsrcvd)
printf(“send()”,“发送了意外的字节数”);
//查看是否有更多数据要接收
numbytsrcvd=recv(clntSocket,buffer,BUFSIZE,0);
if(numbytsrvd<0)
printf(“recv()失败”);
}
关闭(clntSocket);//关闭客户端套接字
}
静态常量int MAXPENDING=5;
int main(int argc,char*argv[]){
如果(argc!=2)
{
printf(“参数”);
}
in_port_t servPort=atoi(argv[1]);
int servSock;//服务器的套接字描述符
if((servSock=socket(AF_INET,SOCK流,IPPROTO_TCP))<0)
{
printf(“套接字失败”);
出口(1);
}
servAddr中的struct sockaddr\u;//本地地址
memset(&servAddr,0,sizeof(servAddr));//零出结构
servAddr.sin_family=AF_INET;//IPv4地址族
servAddr.sin_addr.s_addr=htonl(INADDR_ANY);//任何传入接口
servAddr.sin_port=htons(servPort);//本地端口
//绑定到本地地址
if(bind(servSock,(struct sockaddr*)&servAddr,sizeof(servAddr))<0
{
printf(“绑定失败”);
出口(1);
}
//标记套接字,以便它侦听传入的连接
if(侦听(servSock,MAXPENDING)<0)
printf(“listen()失败”);
为了(;){//永远奔跑
clntAddr中的struct sockaddr\u;//客户端地址
//设置客户端地址结构的长度(输入输出参数)
socklen_t clntAddrLen=sizeof(clntAddr);
//等待客户端连接
int-clntSock=accept(servSock,(struct-sockaddr*)&clntAddr,&clntAddrLen);
如果(clntSock<0)
printf(“接受()失败”);
//clntSock已连接到客户端!
char clntName[INET_ADDRSTRLEN];//包含客户端地址的字符串
如果(inet\U ntop)(AF\U inet,&clntAddr.sin\U addr.s\U addr,clntName,
sizeof(clntName))!=NULL)
printf(“处理客户端%s/%d\n”,clntName,NTOH(clntAddr.sin_端口));
其他的
puts(“无法获取客户地址”);
HandleTCPClient(clntSock);
}
//未达到
}
代码不是我的我抄下来练习的
这应该可以:
服务器代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <string.h>
#define BUFSIZE 512
void HandleTCPClient(int clntSocket) {
char buffer[BUFSIZE]; // Buffer for echo string
// Receive message from client
ssize_t numBytesRcvd = recv(clntSocket, buffer, BUFSIZE, 0);
if (numBytesRcvd < 0)
printf("recv() failed");
// Send received string and receive again until end of stream
while (numBytesRcvd > 0) { // 0 indicates end of stream
// Echo message back to client
ssize_t numBytesSent = send(clntSocket, buffer, numBytesRcvd, 0);
if (numBytesSent < 0)
printf("send() failed");
else if (numBytesSent != numBytesRcvd)
printf("send(), sent unexpected number of bytes");
// See if there is more data to receive
numBytesRcvd = recv(clntSocket, buffer, BUFSIZE, 0);
if (numBytesRcvd < 0)
printf("recv() failed");
}
close(clntSocket); // Close client socket
}
static const int MAXPENDING = 5;
int main(int argc, char *argv[]) {
if (argc != 2)
{
printf ("Parameters , <Server Port required >");
}
in_port_t servPort = atoi(argv[1]);
int servSock; // Socket descriptor for server
if ((servSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
{
printf ( "Socket Failed ");
exit (1);
}
struct sockaddr_in servAddr; // Local address
memset(&servAddr, 0, sizeof(servAddr)); // Zero out structure
servAddr.sin_family = AF_INET; // IPv4 address family
servAddr.sin_addr.s_addr = htonl(INADDR_ANY); // Any incoming interface
servAddr.sin_port = htons(servPort); // Local port
// Bind to the local address
if (bind(servSock, (struct sockaddr*) &servAddr, sizeof(servAddr)) < 0)
{
printf ("Bind Failed ");
exit (1);
}
// Mark the socket so it will listen for incoming connections
if (listen(servSock, MAXPENDING) < 0)
printf("listen() failed");
for (;;) { // Run forever
struct sockaddr_in clntAddr; // Client address
// Set length of client address structure (in-out parameter)
socklen_t clntAddrLen = sizeof(clntAddr);
// Wait for a client to connect
int clntSock = accept(servSock, (struct sockaddr *) &clntAddr, &clntAddrLen);
if (clntSock < 0)
printf ("accept() failed");
// clntSock is connected to a client!
char clntName[INET_ADDRSTRLEN]; // String to contain client address
if (inet_ntop(AF_INET, &clntAddr.sin_addr.s_addr, clntName,
sizeof(clntName)) != NULL)
printf("Handling client %s/%d\n", clntName, ntohs(clntAddr.sin_port));
else
puts("Unable to get client address");
HandleTCPClient(clntSock);
}
// NOT REACHED
}
使用您的ip地址,而不是(192.168.1.7)
希望这有帮助
问候。0.0。
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <string.h>
#define BUFSIZE 512
void HandleTCPClient(int clntSocket) {
char buffer[BUFSIZE]; // Buffer for echo string
// Receive message from client
ssize_t numBytesRcvd = recv(clntSocket, buffer, BUFSIZE, 0);
if (numBytesRcvd < 0)
printf("recv() failed");
// Send received string and receive again until end of stream
while (numBytesRcvd > 0) { // 0 indicates end of stream
// Echo message back to client
ssize_t numBytesSent = send(clntSocket, buffer, numBytesRcvd, 0);
if (numBytesSent < 0)
printf("send() failed");
else if (numBytesSent != numBytesRcvd)
printf("send(), sent unexpected number of bytes");
// See if there is more data to receive
numBytesRcvd = recv(clntSocket, buffer, BUFSIZE, 0);
if (numBytesRcvd < 0)
printf("recv() failed");
}
close(clntSocket); // Close client socket
}
static const int MAXPENDING = 5;
int main(int argc, char *argv[]) {
if (argc != 2)
{
printf ("Parameters , <Server Port required >");
}
in_port_t servPort = atoi(argv[1]);
int servSock; // Socket descriptor for server
if ((servSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
{
printf ( "Socket Failed ");
exit (1);
}
struct sockaddr_in servAddr; // Local address
memset(&servAddr, 0, sizeof(servAddr)); // Zero out structure
servAddr.sin_family = AF_INET; // IPv4 address family
servAddr.sin_addr.s_addr = htonl(INADDR_ANY); // Any incoming interface
servAddr.sin_port = htons(servPort); // Local port
// Bind to the local address
if (bind(servSock, (struct sockaddr*) &servAddr, sizeof(servAddr)) < 0)
{
printf ("Bind Failed ");
exit (1);
}
// Mark the socket so it will listen for incoming connections
if (listen(servSock, MAXPENDING) < 0)
printf("listen() failed");
for (;;) { // Run forever
struct sockaddr_in clntAddr; // Client address
// Set length of client address structure (in-out parameter)
socklen_t clntAddrLen = sizeof(clntAddr);
// Wait for a client to connect
int clntSock = accept(servSock, (struct sockaddr *) &clntAddr, &clntAddrLen);
if (clntSock < 0)
printf ("accept() failed");
// clntSock is connected to a client!
char clntName[INET_ADDRSTRLEN]; // String to contain client address
if (inet_ntop(AF_INET, &clntAddr.sin_addr.s_addr, clntName,
sizeof(clntName)) != NULL)
printf("Handling client %s/%d\n", clntName, ntohs(clntAddr.sin_port));
else
puts("Unable to get client address");
HandleTCPClient(clntSock);
}
// NOT REACHED
}
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <string.h>
#define BUFSIZE 512
int main(int argc, char *argv[]) {
if (argc < 3 || argc > 4) // Test for correct number of arguments
{
fprintf(stderr, "Parameter(s), <Server Address> <Echo Word> [<Server Port>]\n");
exit(EXIT_FAILURE);
}
char *servIP = argv[1]; // First arg: server IP address (dotted quad)
char *echoString = argv[2]; // Second arg: string to echo
// Third arg (optional): server port (numeric). 7 is well-known echo port
in_port_t servPort = (argc == 4) ? atoi(argv[3]) : 7;
// Create a reliable, stream socket using TCP
int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock < 0)
{
fprintf(stderr, "socket() failed\n");
exit(EXIT_FAILURE);
}
// Construct the server address structure
struct sockaddr_in servAddr; // Server address
memset(&servAddr, 0, sizeof(servAddr)); // Zero out structure
servAddr.sin_family = AF_INET; // IPv4 address family
// Convert address
int rtnVal = inet_pton(AF_INET, servIP, &servAddr.sin_addr.s_addr);
if (rtnVal == 0)
{
fprintf(stderr, "inet_pton() failed, invalid address string\n");
exit(EXIT_FAILURE);
}
else if (rtnVal < 0)
{
fprintf(stderr, "inet_pton() failed\n");
exit(EXIT_FAILURE);
}
servAddr.sin_port = htons(servPort); // Server port
printf ("Hello");
// Establish the connection to the echo server
if (connect(sock, (struct sockaddr *) &servAddr, sizeof(servAddr)) < 0)
fprintf(stderr, "connect() failed\n");
size_t echoStringLen = strlen(echoString); // Determine input length
// Send the string to the server
ssize_t numBytes = send(sock, echoString, echoStringLen, 0);
if (numBytes < 0)
{
fprintf(stderr, "send() failed\n");
exit(EXIT_FAILURE);
}
else if (numBytes != echoStringLen)
{
fprintf(stderr, "send(), sent unexpected number of bytes\n");
exit(EXIT_FAILURE);
}
// Receive the same string back from the server
unsigned int totalBytesRcvd = 0; // Count of total bytes received
fputs("Received: ", stdout); // Setup to print the echoed string
while (totalBytesRcvd < echoStringLen) {
char buffer[BUFSIZE]; // I/O buffer
/* Receive up to the buffer size (minus 1 to leave space for
a null terminator) bytes from the sender */
numBytes = recv(sock, buffer, BUFSIZE - 1, 0);
if (numBytes < 0)
{
fprintf(stderr, "recv() failed\n");
exit(EXIT_FAILURE);
}
else if (numBytes == 0)
{
fprintf(stderr, "recv(), connection closed prematurely\n");
exit(EXIT_FAILURE);
}
totalBytesRcvd += numBytes; // Keep tally of total bytes
buffer[numBytes] = '\0'; // Terminate the string!
fputs(buffer, stdout); // Print the echo buffer
}
fputc('\n', stdout); // Print a final linefeed
close(sock);
exit(0);
}
toc@UnixServer:~./client_error_socket 192.168.1.7 "HELLO" 4444
HelloReceived: HELLO
toc@UnixServer:~./server_error_socket 4444
Handling client 192.168.1.7/56963