求C语言高手!!!在线等 给高分!!! 100

实现一个简单的TCPIP程序以实现两台计算机之间的聊天通信,功能要求:1)两个程序,分别是客户端和服务器端2)可以在客户端或服务器端输入文本信息,回车后将文本信息传输到对... 实现一个简单的TCPIP程序以实现两台计算机之间的聊天通信,
功能要求:
1)两个程序,分别是客户端和服务器端
2)可以在客户端或服务器端输入文本信息,回车后将文本信息传输到对端,文本显示在对端屏幕上。
3)服务器可以与一个或多个客户端连接

要求:
1)使用C或C++语言
2)利用TCP socket 实现
3)可以在windows 或 Linux/unix下调试
4)不做界面,直接用显示在console 窗口上
5)必须有足够的注释

其他要求:
1)自己实现,如果发现重复或雷同,所有重复和雷同的成绩无效
2)把源程序和运行结果(截图)打印出来,带到考场,作为试题的一部分。打印加入自己的学号和名字和班级。
我这边有文件 就是需要帮忙做一下 谢谢!!! 应该很简单的 !!!
展开
 我来答
用电知识分享
2012-06-20 · TA获得超过1831个赞
知道小有建树答主
回答量:841
采纳率:69%
帮助的人:267万
展开全部
Linux环境服务端与客户端程序如下:

/*
* TCP server 测试程序
*/
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>

#define MYPORT 3490 /* 监听端口 */
#define BACKLOG 10 /* listen的请求接收队列长度 */
#define MAXDATASIZE 100

void main()
{
int sockfd, client_fd; /* 监听端口,数据端口 */
struct sockaddr_in my_addr; /* 自身的地址信息 */
struct sockaddr_in their_addr; /* 连接对方的地址信息 */
int sin_size;
int i;
char send_str[50] = "Hello, world!";
char receive_buf[100];

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket");
exit(1);
}

my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MYPORT); /* 网络字节顺序 */
my_addr.sin_addr.s_addr = INADDR_ANY; /* 自动填本机IP */
bzero(&(my_addr.sin_zero), 8); /* 其余部分置0 */
if (bind(sockfd, (struct sockaddr *)&my_addr,
sizeof(struct sockaddr)) == -1)
{
perror("bind");
exit(1);
}

if (listen(sockfd, BACKLOG) == -1)
{
perror("listen");
exit(1);
}

while(1)
{ /* 主循环 */
sin_size = sizeof(struct sockaddr_in);
client_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);
if (client_fd == -1)
{
perror("accept");
continue;
}
printf("Got connection from : %s \n", (char*)inet_ntoa(their_addr.sin_addr));

if (!fork())
{
/* 子进程 接收请求并响应 */
//printf("Received :");
if(recv( client_fd, receive_buf, MAXDATASIZE, 0) == -1)
{
printf("server receive error!");
exit(0);
}

printf("Received :%s\n",receive_buf);

printf("Please Input string to be sent:%s");
gets(send_str);

if (send(client_fd, send_str, sizeof(send_str), 0) == -1)
perror("send");
printf("Server send:%s \n", send_str);
close(client_fd);
exit(0);
}
close(client_fd); /* 无法生成子进程时有用 */

while(waitpid(-1,NULL,WNOHANG) > 0); /*清除所有子进程 */
}
}

/*
* TCP client 测试程序
*/
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

#define PORT 3490 /* Server的端口 */
#define MAXDATASIZE 100 /* 一次可以读的最大字节数 */

#define DEBUG

int main(int argc, char *argv[])
{
int sockfd, numbytes;
char buf[MAXDATASIZE];
int count = 0;
int len = 0; /* 发送的长度 */
struct sockaddr_in server_addr; /* server地址信息 */
char serverip[] = "192.168.140.172";
char send_str[50] = "Client request from client!";

if ((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
{
perror("socket");
exit(1);
}

server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT); /* short, NBO */
server_addr.sin_addr.s_addr = inet_addr(serverip);
bzero(&(server_addr.sin_zero), 8); /* 其余部分设成0 */
if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
{
perror("connect");
exit(1);
}
#ifdef DEBUG
printf("Connect to server %s success! \n", serverip);
#endif
printf("Please Input string to be sent:%s");
gets(send_str);

/* 向server发送请求 */
if ( send(sockfd, send_str, strlen(send_str)+1, 0) == -1)
perror("send error");

/* 接收server的响应 */
if ((numbytes = recv(sockfd, buf, MAXDATASIZE, 0)) == -1)
{
perror("recv");
exit(1);
}
#ifdef DEBUG
printf("Receive from server success! \n", serverip);
#endif
buf[numbytes] = '\0';
printf("Received: %s \n",buf);
close(sockfd);
return 0;
}

客户端先输入,然后发送,服务端接收到后显示。 然后服务端等待输入,发送给客户端。根据实际的IP,改一下。
追问
你好 您方便留个QQ吗?
谈若滥
2012-06-20
知道答主
回答量:5
采纳率:0%
帮助的人:7958
展开全部
你好像不太习惯用数组b[10][10]里边b[n][0],b[0][n]都不用的,不知道问题是不是出在这儿。 我改了一下 ,把数组改过来,去掉了goto语句 只能计算中间没出0的行列式。个人水平有限,也只能到这种程度。遇到b[k][k]=0时候就会出错答案。另外你的Z有问题,如果z本身是负的,就会出现比如3.8 输出为--3.8的情况。呵呵 可能没帮多大忙 加油吧。 #include<stdio.h> void main() { float b[10][10],z=1,zhongjie; int i,j,k=0,n,l,h,fu=1; printf("您要计算几阶方阵?"); scanf("%d",&n); printf("请按行输入每个元素的值!"); for(i=0;i<n;i++) //给行列式的每个元素赋值// { for(j=0;j<n;j++) { printf("请输入a%d,%d ",i+1,j+1); scanf("%f",&b[i][j]); printf("%f ",b[i][j]); printf("\n"); } } printf("原行列式是\n"); //输出原行列式// for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%f ",b[i][j]); printf("\n"); } printf("\n"); printf("\n"); for(l=0;l<n;l++) { if(b[k][k]!=0) { for(i=k+1;i<n;i++) { //如果第k行第k个元素不为0,则能后面行的第k个元素消为0// for(j=0;j<n;j++) //用第k行第k个元素将k~n行第k个元素消为0// { b[i][j]=b[i][j]-b[k][j]*(b[i][k]/b[k][k]); } } k++; } else { //如果第k行第k个元素为0,则后面行的第k个元素不能消为0,这就需要将第k个元素不为0的第h行与第k行对调// for(h=k;h<=n;h++) { if((b[h][j]!=0)) { for(j=0;j<n;j++) { zhongjie=b[k][j]; b[k][j]=b[h][j]; b[h][j]=zhongjie; //第k行与第h行对应元素相互对调 } fu++; i--; break; //fu 是用来判断行与行的对调次数 } } } } for(i=0;i<n;i++) //输出变换后的上三角阵 { for(j=0;j<n;j++) printf("%f ",b[i][j]); printf("\n"); } for(i=0;i<n;i++) //将化简后的上三角阵对角相乘 z=z*b[i][i]; if(fu%2==0) //如果上面的换行次数(fu)为偶数,则z就是行列式的值 printf("行列式的值是%f\n",z); else //如果fu是奇数 ,则-Z是行列式的值 printf("行列式的值是-%f\n",z); } PS: 群居网 上有很多类似的东西,你可以搜索去看看eigedwwlyt20247348512012-6-20 22:18:27
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式